Silverlight如何确定程序集是“ Silverlight”?
-
04-07-2019 - |
题
我正在尝试从F#编译代码以在Silverlight中使用。我编译:
- noframework --cliroot" C:\ program Files \ Microsoft Silverlight \ 2.0.31005.0" --standalone
这会生成一个引用SL框架的独立程序集。但是当我尝试添加对生成的程序集的引用时,我收到此错误:
您只能添加项目引用 其他Silverlight项目 溶液
确定这不是Silverlight程序集的VS插件是做什么的?这是清单:
// 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,它仍然加载。
有什么建议吗?
更新:我做了一些探讨,似乎并不重要。它不喜欢FSharp库中IL的内容。它们是可以防腐的,但是那里的东西引发了拒绝。
解决方案
答案!
显然问题是当你添加对bin \ Release或bin \ Debug的引用时,Visual Studio(或Silverlight项目系统)决定尝试引用该项目。无论出于何种原因,这都会失败。
如果将F#输出DLL复制到另一个位置,那么引用就可以了。 (当然,这将是文件参考,而不是项目参考。)
然后设置依赖项以便首先构建F#库,然后您可以使用文件引用来获取F#生成的二进制文件。
更新:一个更明显的问题。如果我打开优化代码,那么我会收到此错误:
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'
如果我保持优化代码,这就会消失,一切正常。
其他提示
Visual Studio使用Microsoft.VisualStudio.Silverlight.SLUtil类型中的IsSilverlightAssembly()函数来检查是否可以设置引用。
David Betz有一篇很好的博客文章描述了这里的详细信息。