FSharp.Core.sigdata未与FSharp.Core一起找到

10

我正在尝试在ASP.NET MVC应用程序中使用F#。我的一个控制器操作将一个F#列表发送到视图,因此我编写了以下代码:

<%@ Page Language="C#" Inherits="ViewPage<FSharpList<int>>" %>

当然,要使此功能正常工作,我必须将Microsoft.FSharp.Collections添加到我的web.config文件中的namespaces元素中:
<add namespace="Microsoft.FSharp.Collections"/>

并在assemblies元素中添加对FSharp.Core的引用:

<add assembly="FSharp.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

一旦我添加了这个程序集引用,每个视图(无论是否使用F#类型)都会出现以下错误:
错误 FS1221: 在FSharp.Core旁找不到FSharp.Core.sigdata
如果我的视图中没有任何特定于F#的类型,我可以通过此方法解决此问题,但是这个错误的原因是什么呢?另外,FSharp.Core.sigdata在哪里?它不在我的GAC中,我也找不到它。

你能把你目前的项目上传到某个地方吗?我很乐意尝试一下,但有一个项目作为起点会很有用 :-). - Tomas Petricek
@Tomas:谢谢,我会尝试创建一个小项目来重现这个问题。 - Mauricio Scheffer
@Tomas:这是项目链接:http://www.box.net/shared/7xnkfg5yps - Mauricio Scheffer
我有一个类似的问题。然而它是暂时的。在我的CI服务器上,一个构建可以正常工作,另一个构建在查找sigdata时失败。它们使用完全相同的构建脚本。它们之间唯一的区别是当没有构建错误时发生的后续情况。 - Rune FS
1个回答

13

你可以在“参考程序集”中找到它,因为sigdata和optdata是设计时的东西(但我猜CodeDom也需要它们?),例如:

C:\Program Files\Reference Assemblies\Microsoft\FSharp\2.0\Runtime\v2.0\FSharp.Core.dll
C:\Program Files\Reference Assemblies\Microsoft\FSharp\2.0\Runtime\v2.0\FSharp.Core.optdata
C:\Program Files\Reference Assemblies\Microsoft\FSharp\2.0\Runtime\v2.0\FSharp.Core.sigdata

如果您将这些文件复制到应用程序正在使用的 FSharp.Core 旁边,它可能会正常工作。


尝试将optdata和sigdata都复制到我的应用程序的bin目录,但出现了相同的错误。我还尝试将它们复制到GAC中FSharp.Core目录中,但仍然是同样的情况。 - Mauricio Scheffer
2
在我将optdata和sigdata与FSharp.Core.dll一起复制后,问题得到了解决。 - t0yv0
@tovyo:针对一个Web应用程序? - Mauricio Scheffer
将 opdata 和 sigdata 与 FSharp.Core.dll 一起复制到部署文件夹中,在 .Net 4.5 控制台应用程序中可以正常工作。 - Phillip Trelford
这真的很有帮助,将 FSharp.Core.optdata 和 FSharp.Core.sigdata 添加到项目中作为内容,并将属性设置为始终复制,问题就解决了。 - Roboblob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接