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

时间:2014-01-13 20:42:13

标签: .net f#

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

我以为我会签署可执行文件,以便将其放入GAC。我将--keyfile添加到编译器命令行。其他一切都完全一样。 .exe仍然构建正常,但在运行时死机抱怨无法找到一个仍然在它可以在之前看到它的同一个地方的dll。

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

[它抱怨无法找到的特殊dll是FsCheck,虽然它可能只是它寻找的第一个。我认为签名的程序集只需要依赖已签名的dll,因为它们可能也需要放在GAC中。我尝试了两种不同版本的FsCheck,一种是NuGet上最新版本。两者都没有签署。我尝试用al签名,但崩溃了(Cygwin下的分段错误)]

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

调试此类问题的常用方法是启动fuslogvw,这将提供有关CLR搜索依赖项的确切位置的详细信息,以及这些候选项为何或为何不成功。

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