.net可执行文件在签名后找不到库

.net可执行文件在签名后找不到库,.net,f#,.net,F#,我有一个F#控制台应用程序。它是建立使用一个长期运行的fsc,并工作良好。(我没有使用MSV来构建应用程序,因为它不在Mono下运行,尽管我要问的问题发生在.net和Windows 7下) 我想我会给可执行文件签名,这样它就可以放在GAC中了。我在编译器命令行中添加了--keyfile。其他一切都完全一样。exe仍然可以很好地构建,但是在运行时就死了,因为它抱怨找不到一个dll,而该dll仍然位于它之前可以看到它的地方 我试着用谷歌搜索答案,但没有成功。我希望必须有文件说明该怎么做?非常感谢你的

我有一个F#控制台应用程序。它是建立使用一个长期运行的fsc,并工作良好。(我没有使用MSV来构建应用程序,因为它不在Mono下运行,尽管我要问的问题发生在.net和Windows 7下)

我想我会给可执行文件签名,这样它就可以放在GAC中了。我在编译器命令行中添加了--keyfile。其他一切都完全一样。exe仍然可以很好地构建,但是在运行时就死了,因为它抱怨找不到一个dll,而该dll仍然位于它之前可以看到它的地方

我试着用谷歌搜索答案,但没有成功。我希望必须有文件说明该怎么做?非常感谢你的帮助


[它抱怨找不到的特定dll是FsCheck,尽管它可能只是它查找的第一个dll。我认为签名程序集只需要依赖于签名dll,因为它们可能也需要放在GAC中。我尝试了两个不同版本的FsCheck,其中一个是通过NuGet提供的最新版本。sig也没有我试着用al给他们签名,但它崩溃了(Cygwin下有分段错误)]

请注意,CLR上的已签名程序集只能引用其他已签名程序集。这意味着,如果对exe进行签名,则它所依赖的所有dll文件也必须进行签名。听起来,在运行时可供其查找的程序集没有正确签名。要解决此问题,还需要对这些程序集进行签名(可能在编译exe之前)

调试此类问题的常用方法是启动,它将提供有关CLR在何处搜索依赖项的详细信息,以及这些候选项成功的原因

如果安装了VS,则如果启动开发人员命令提示符,
fuslogvw
将出现在路径中。如果没有VS,则可以通过安装Windows SDK获得该工具