2

今天我在ASP.NET MVC 3應用程序(使用Visual Studio 2010)中有一些路由問題。NuGet的RouteDebug沒有強名

所以我想我安裝了ASP.NET RouteDebugger並修復了我的路由問題。

後,我通過NuGet拿到包我的項目已經不建:

referenced assembly ' RouteDebug' does not have a strong name 

我可以下載RouteDebugger的來源和建立(並強烈簽名)它自己,但這不是目的NuGet不是'它;)

任何人都有這個問題,也許修好了嗎?

回答

3

嗯,這個問題並沒有真正與NuGet相關。您不能從已簽名的程序集中引用未簽名的程序集。而且由於NuGet軟件包中包含的RouteDebug.dll沒有進行強烈的簽名,所以如果您的應用程序被強烈簽名,您將無法使用它。所以,你基本上有兩種可能性可供選擇:

  1. 下載RouteDebug的源代碼,並通過強大的關鍵
  2. 簽署從您的託管應用程序中刪除強密鑰簽名自己編譯。
+0

TNX你的答案達林。我知道我的項目是強烈簽署的,routedebugger不是。但是我的項目中的其他NuGet包工作得很好,根本沒有任何構建問題。所以我不明白爲什麼這個軟件包沒有強烈的簽名。 – 2011-03-25 17:48:39

+0

@Andrew Flierman,因爲這就是包裹作者的決定。所以你可以嘗試聯繫他,並建議改變這一點。我不明白我可以如何進一步幫助。 – 2011-03-25 17:53:16

+0

我聯繫了包裹的作者,所以也許他可以進一步幫助我。 Tnx雖然你的幫助! – 2011-03-25 19:25:43

0

這是一個公認的缺點,如討論here

1

無需使用源代碼就可以簽署已編譯的程序集。這在這裏解釋:http://www.geekzilla.co.uk/ViewCE64BEF3-51A6-4F1C-90C9-6A76B015C9FB.htm。總之,你需要使用ildasm得到IL的組裝,然後使用ilasm再生的dll,這次簽約:

ildasm SomeAssembly.dll /out:SomeAssembly.il 
ren SomeAssembly.dll SomeAssembly.dll.orig (for backup purposes) 
ilasm SomeAssembly.il /dll /key= keyPair.snk 

但是,是的,使用無符號的NuGet包在一個項目中有簽名的程序集是在屁股疼...

0

這是一個常見的問題,因爲許多nuget軟件包沒有強大的命名。有可能通過在構建時動態地給任何包含的nuget包提供一個強名稱來解決這個問題。將nuget添加包「Brutal.Dev.StrongNameSigner」添加到您的項目中。 然後在您的.csproj的文件,從而添加引用:

<Target Name="BeforeBuild"> 
    <Exec ContinueOnError="false" 
     Command="&quot;..\packages\Brutal.Dev.StrongNameSigner.1.8.0\tools\StrongNameSigner.Console.exe&quot; -in &quot;..\packages&quot;" /> 
</Target> 

然後在編譯的時候,你的未簽名的NuGet引用會得到一個簽名產生的,和你的裝配refernces將被更新,以匹配新生成的簽名。

的NuGet:https://www.nuget.org/packages/Brutal.Dev.StrongNameSigner/

項目:https://github.com/brutaldev/StrongNameSigner