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

相关问题