来自NuGet的RouteDebug没有强名

时间:2011-03-25 12:31:45

标签: asp.net asp.net-mvc visual-studio-2010 asp.net-mvc-3 asp.net-mvc-routing

今天我在ASP.NET MVC 3应用程序(使用Visual Studio 2010)中遇到了一些路由问题。

所以我想我安装了ASP.NET RouteDebugger并解决了我的路线问题。

通过NuGet获得包后,我的项目不再构建:

referenced assembly ' RouteDebug' does not have a strong name

我可以下载RouteDebugger的源代码并自己构建(并强烈签名),但这不是NuGet的目的不是'it;)

其他人有这个问题,也许修好了吗?

4 个答案:

答案 0 :(得分:3)

嗯,问题与NuGet无关。您无法从已签名的程序集中引用未签名的程序集。并且因为NuGet包中包含的RouteDebug.dll没有强烈签名,所以如果您的应用程序是强签名的,您将无法使用它。所以你基本上有两种可供选择的可能性:

  1. 下载RouteDebug的源代码,并使用强密钥签名自行编译
  2. 从托管应用程序中删除强密钥签名。

答案 1 :(得分: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包是一件痛苦的事......

答案 2 :(得分:0)

这是nuget公认的缺点,如here所述。

答案 3 :(得分: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引用将生成签名,并且您的程序集引用将更新以匹配新生成的签名。

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

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