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

问题描述:

我有一个F#控制台应用程序。它使用fsc的一个长期运行而构建,并且工作正常。 (我不使用MSVS来构建应用程序,因为它不能在Mono下运行,尽管我问的问题发生在.net和Windows 7下).net可执行文件在签名后找不到库

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

我试着用Google搜索没有成功的答案。我希望有文件解释要做什么?非常感谢您的帮助。

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

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

调试这样的问题的通常方法是启动fuslogvw,它将提供关于CLR寻找依赖关系,为什么或为什么不能成功。

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