ng5*_*000 230 c# strongname assemblies visual-studio-2005 visual-studio
我已经为我的Visual Studio 2005项目(强名称)添加了一个弱命名的程序集.我现在收到错误:
"引用汇编'xxxxxxxx'没有强名称"
我是否需要签署此第三方程序集?
Dir*_*mar 205
要避免此错误,您可以:
您将在.NET-fu中找到有关签署第三方程序集的说明:签署未签名的程序集(无延迟签名).
签署罢工党的基本原则是
使用ildasm.exe并拆除组件并保存中间语言(IL):
ildasm /all /out=thirdPartyLib.il thirdPartyLib.dll
Run Code Online (Sandbox Code Playgroud)重建并签署程序集:
ilasm /dll /key=myKey.snk thirdPartyLib.il
Run Code Online (Sandbox Code Playgroud)除非您的第三方程序集(A.dll)引用另一个也必须签名的库(B.dll),否则上述步骤可以正常工作.你可以使用上面的命令反汇编,重建和签署A.dll和B.dll,但是在运行时,加载B.dll会失败,因为A.dll最初构建时引用了无符号版本的B.dll.
解决此问题的方法是修补上面步骤1中生成的IL文件.您需要将B.dll的公钥标记添加到引用中.你通过调用得到这个标记
sn -Tp B.dll
Run Code Online (Sandbox Code Playgroud)
这将给你以下输出:
Microsoft (R) .NET Framework Strong Name Utility Version 4.0.30319.33440
Copyright (c) Microsoft Corporation. All rights reserved.
Public key (hash algorithm: sha1):
002400000480000094000000060200000024000052534131000400000100010093d86f6656eed3
b62780466e6ba30fd15d69a3918e4bbd75d3e9ca8baa5641955c86251ce1e5a83857c7f49288eb
4a0093b20aa9c7faae5184770108d9515905ddd82222514921fa81fff2ea565ae0e98cf66d3758
cb8b22c8efd729821518a76427b7ca1c979caa2d78404da3d44592badc194d05bfdd29b9b8120c
78effe92
Public key token is a8a7ed7203d87bc9
Run Code Online (Sandbox Code Playgroud)
最后一行包含公钥令牌.然后,您必须在A.dll的IL中搜索对B.dll的引用,并按如下方式添加令牌:
.assembly extern /*23000003*/ MyAssemblyName
{
.publickeytoken = (A8 A7 ED 72 03 D8 7B C9 )
.ver 10:0:0:0
}
Run Code Online (Sandbox Code Playgroud)
MrO*_*000 96
展开正在使用不具有"强名称密钥"的项目的项目文件,并查找.snk文件(.StrongNameKey).
在Windows资源管理器中浏览到此文件(只是为了让您知道它在哪里).
回到没有"强名称密钥"的项目中的Visual Studio,做
这应该够了吧.这解决了我在同一解决方案中使用另一个项目中的表单的一个项目的问题.
我希望它有所帮助.
Bru*_*Dev 47
我编写了一个工具来自动强化标记程序集,包括没有源代码的程序集或已经放弃的项目.它以简单的方式使用答案中描述的许多技术,没有现有工具或过时指令的任何缺陷或缺点.
http://brutaldev.com/post/2013/10/18/NET-Assembly-Strong-Name-Signer
希望这有助于任何需要签署第三方程序集的人,而不必跳过篮球去那里.
mat*_*scb 22
签署第三方程序集对我有用:
http://www.codeproject.com/Tips/341645/Referenced-assembly-does-not-have-a-strong-name
编辑:我已经了解到,如果链接的文章不再有效,发布步骤会很有帮助.所有功劳都归功于Hiren Khirsaria:
运行visual studio命令提示符并转到DLL所在的目录.
For Example my DLL is located inD:/hiren/Test.dll
现在使用以下命令创建IL文件.
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
Mar*_*ers 14
sn ildasm和ilasmsn –k Cool.Library.snk 创建一个新的密钥对ildasm Cool.Library.dll /out:Cool.Library.il 拆解图书馆move Cool.Library.dll Cool.Library.unsigned.dll 保持原始库作为备份ilasm Cool.Library.il /dll /resource=Cool.Library.res /key=Cool.Library.snk 用强名称重新组装库powershell -command "& {[System.Reflection.AssemblyName]::GetAssemblyName($args).FullName} Cool.Library.dll"获取程序集完全限定名称.如果必须在web.config或app.config等外部配置文件中引用DLL,则需要此位.我有一个强烈命名的应用程序然后必须更改它以引用非强名称程序集的问题,所以我在项目属性签名部分取消选中"签署程序集",但它仍然抱怨.我认为它必须是一个造成问题的工件,因为我做了其他正确的事情而且就是这样.我从assemblyInfo.cs文件中找到并删除了行:[assembly:AssemblyKeyFile("yourkeyfilename.snk")].然后没有建立投诉.
| 归档时间: |
|
| 查看次数: |
245086 次 |
| 最近记录: |