我正在尝试从 F# 编译代码以在 Silverlight 中使用。我编译:
--noframework --cliroot "C:\program Files\Microsoft Silverlight\2.0.31005.0" --standalone
这会生成引用 SL 框架的独立程序集。但是当我尝试添加对生成的程序集的引用时,出现此错误:
您只能将项目引用添加到
其他 Silverlight 项目
解决方案。
VS 插件做什么来确定这不是 Silverlight 程序集?这是清单:
// Metadata version: v2.0.50727
.assembly extern mscorlib
{
.publickeytoken = (7C EC 85 D7 BE A7 79 8E ) // |.....y.
.ver 2:0:5:0
}
.assembly FSSLLibrary1
{
// --- The following custom attribute is added automatically, do not uncomment -------
// .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 )
.hash algorithm 0x00008004
.ver 0:0:0:0
}
.module 'F#-Module-FSSLLibrary1'
// MVID: {49038883-5D18-7281-A745-038383880349}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003 // WINDOWS_CUI
.corflags 0x00000001 // ILONLY
// Image base: 0x04120000
我不明白它发现什么是它不喜欢的;它是纯粹的可验证 IL。我与 SL“类库”程序集进行了比较,它看起来是一样的。唯一的区别是一些属性,但我删除了这些属性,VS 仍然让我引用该 DLL。我什至将无法验证的 IL 添加到“SL 库”DLL 中,但它仍然加载。
有什么建议么?
Update:我已经做了一些探索,似乎清单并不重要。它不喜欢 FSharp 库的 IL 中的某些内容。它们是可渗透的,但其中的某些东西会引发排斥反应。
Answer!
显然,问题在于,当您添加对 bin\Release 或 bin\Debug 的引用时,Visual Studio(或 Silverlight 项目系统)决定尝试引用该项目。无论出于何种原因,这都会失败。
如果将 F# 输出 DLL 复制到另一个位置,那么引用就可以正常进行。 (当然,这将是文件参考,而不是项目参考。)
然后设置依赖项,以便首先构建 F# 库,然后您可以使用文件引用来获取 F# 生成的二进制文件。
Update:还有一个更明显的问题。如果我打开优化代码,则会收到此错误:
C:\test\SilverlightApplication1\FSC(0,0): error FS0193: internal error: the module/namespace 'System' from compilation unit 'mscorlib' did not contain the namespace, module or type 'MarshalByRefObject'
如果我关闭优化代码,这种情况就会消失并且一切正常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)