今天我在ASP.NET MVC 3应用程序(使用Visual Studio 2010)中遇到了一些路由问题。
所以我想我安装了ASP.NET RouteDebugger并解决了我的路线问题。
通过NuGet获得包后,我的项目不再构建:
referenced assembly ' RouteDebug' does not have a strong name
我可以下载RouteDebugger的源代码并自己构建(并强烈签名),但这不是NuGet的目的不是'it;)
其他人有这个问题,也许修好了吗?
答案 0 :(得分:3)
嗯,问题与NuGet无关。您无法从已签名的程序集中引用未签名的程序集。并且因为NuGet包中包含的RouteDebug.dll
没有强烈签名,所以如果您的应用程序是强签名的,您将无法使用它。所以你基本上有两种可供选择的可能性:
答案 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=""..\packages\Brutal.Dev.StrongNameSigner.1.8.0\tools\StrongNameSigner.Console.exe" -in "..\packages"" />
</Target>
然后在编译时,您的未签名nuget引用将生成签名,并且您的程序集引用将更新以匹配新生成的签名。
nuget:https://www.nuget.org/packages/Brutal.Dev.StrongNameSigner/