2

我有以下 C# 类,我想在 F# 中使用

using System;
using System.Collections.Generic;
using System.Text;

namespace DataWrangler.Structures
{
    public enum Type { Trade = 0, Ask = 1, Bid = 2 }

    public class TickData
    {
        public string Security = String.Empty;
        public uint SecurityID = 0;
        public object SecurityObj = null;
        public DateTime TimeStamp = DateTime.MinValue;
        public Type Type;
        public double Price = 0;
        public uint Size = 0;
        public Dictionary<string, string> Codes;
    }
}

我想在 F# 中创建它的一个实例。我用来执行此操作的代码位于 f# 脚本文件中

#r @"C:\Users\Chris\Documents\Visual Studio 2012\Projects\WranglerDataStructures\bin\Debug\WranglerDataStructures.dll"

open System
open System.Collections.Generic;
open System.Text;
open DataWrangler.Structures

type tick = TickData // <- mouse over the "tick" gives me a tooltip with the class structure

// it bombs out on this line 
let tickDataTest = tick(Security = "test", TimeStamp = DateTime(2013,7,1,0,0,0), Type = Type.Trade, Price = float 123, Size = uint32 10 )

我得到的错误是:

error FS0193: internal error: Could not load file or assembly 'file:///C:\Users\Chris\Documents\Visual Studio 2012\Projects\WranglerDataStructures\bin\Debug\WranglerDataStructures.dll' or one of its dependencies. An attempt was made to load a program with an incorrect format.

我检查了文件路径,它们似乎是正确的。我可以将鼠标悬停在“类型刻度”上,它为我提供了 C# 对象的结构。所以它似乎正在寻找 C# 代码。谁能告诉我我在这里做错了什么?句法?对 C# -> F# introp 还是很陌生

4

1 回答 1

7

这里有几件事要检查:

  1. 确保 fsi.exe 以与 WranglerDataStructures.dll 兼容的位模式运行。通过在 Visual Studio 选项中的 F# 工具 -> F# 交互 -> 64 位 F# 交互下设置标志,将 fsi.exe 作为 64 位或 32 位进程运行。您通常可以通过将 C# 程序集设置为编译为 Any CPU 来避免这些类型的问题。

  2. 确保 WranglerDataStructures.dll 不依赖于您未从 F# 引用的其他库。在 F# 中添加引用,或从 WranglerDataStructures.dll 中删除它们。

如果这些步骤没有成功,请尝试使用 fuslogview.exe 工具http://msdn.microsoft.com/en-us/library/e74a18c4.aspx来查看没有加载的确切引用。

于 2013-07-29T17:15:25.303 回答