2014-01-13 58 views
1

我有一個F#控制檯應用程序。它使用fsc的一個長期運行而構建,並且工作正常。 (我不使用MSVS來構建應用程序,因爲它不能在Mono下運行,儘管我問的問題發生在.net和Windows 7下).net可執行文件在簽名後找不到庫

我以爲我會簽署可執行文件以便它可以放置在GAC中。我在編譯器命令行中添加了--keyfile。其他一切都完全一樣。 .exe仍然可以正常生成,但是在運行時死於抱怨無法找到一個仍然在可以看到它的同一個地方的dll。

我試着用Google搜索沒有成功的答案。我希望有文件解釋要做什麼?非常感謝您的幫助。

[它抱怨無法找到的特定dll是FsCheck,儘管它可能只是它所尋找的第一個。我認爲簽署的程序集只需要依賴簽名的dll,因爲它們可能也需要放在GAC中。我嘗試了兩種不同版本的FsCheck,一種是NuGet的最新版本。兩人都沒有簽署。我嘗試使用al簽名它們,但它崩潰(在Cygwin下有分段錯誤)]

回答

2

請注意,CLR上簽名的程序集只能引用其他簽署的程序集。這意味着如果你對exe文件進行簽名,它所依賴的所有dll文件也必須被簽名。這聽起來像它可以在運行時找到的程序集沒有正確簽名。爲了解決這個問題,你還需要簽署這些程序集(可能在你編譯exe之前)

0

調試這樣的問題的通常方法是啓動fuslogvw,它將提供關於CLR尋找依賴關係,爲什麼或爲什麼不能成功。

如果您安裝了VS,如果您啓動開發人員命令提示符,則fuslogvw將位於路徑中。如果你沒有VS,你可以通過安裝Windows SDK來獲得該工具。