我在Visual Studio 2005项目中添加了一个弱命名的程序集(它是强命名的)。我现在得到的错误:

"引用程序集'xxxxxxxx'没有强名称"

我需要签署这个第三方程序集吗?


当前回答

对我来说,问题在于没有强名称的NuGet包。解决方案是从NuGet安装StrongNamer,它会自动向所有引用的程序集添加强名称。只是简单地在项目中引用它修正了我的问题。

其他回答

为第三方程序集签名对我来说很有效:

引用程序集没有强名称

我了解到,如果链接的文章不再有效,发布步骤是很有帮助的。所有功劳归于Hiren Khirsaria:

运行Visual Studio命令提示符并转到DLL所在的目录。 例如,我的DLL位于D:/hiren/Test.dll 现在使用下面的命令创建CIL文件。 D:/hiren> ildasm /all /out=Test。il Test.dll(此命令生成代码库) 生成一个新密钥来对项目进行签名。 D:/hiren> sn -k mykey.snk 现在使用ilasm命令对库进行签名。 D:/hiren> ilasm /dll /key=mykey。snk Test.il

对我来说,我的问题是我有两个相同的NuGet包安装了不同的版本。

展开使用“没有强名称键”的项目的项目文件,寻找.snk文件(. strongnamekey)。

在Windows资源管理器中浏览这个文件(这样你就知道它在哪里了)。

回到Visual Studio中那个没有“强名称键”的项目,做

右键单击项目文件 选择属性 选择“签名选项卡”(在左侧) 单击“签署程序集”复选框 然后<Browse>到前面找到的.snk文件

这样应该可以了。这为我解决了一个问题,在同一个解决方案中,在另一个项目中使用一个表单。

我希望这能有所帮助。

我已经编写了一个工具来自动强名称标记程序集,包括您没有源代码的程序集或已放弃的项目。它以一种简单的方式使用了答案中描述的许多技术,没有任何现有工具或过时说明的缺陷或缺陷。

.NET程序集强- name签名者

我希望这可以帮助任何需要签署第三方程序集的人,而不必经过重重困难才能到达那里。

ilmerge使用。ilmerge来自微软,但它没有随Visual Studio或sdk一起发布。不过你可以从这里下载。还有一个GitHub存储库。你也可以从NuGet安装:

PM> Install-Package ilmerge

使用方法:

ilmerge assembly.dll /keyfile:key.snk /out:assembly.dll /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 /ndebug

如果需要,你可以使用sn(从Visual Studio)生成你自己的密钥文件:

sn -k key.snk