2012-02-22 60 views
12

这是一个经典的问题,它有numerous解决方案described。但是,他们中没有一个人似乎为我工作。程序集生成失败 - 引用程序集没有强名称。为什么没有其他的解决方案?

我在SharePoint解决方案中使用了Report.NET库。添加Reports.dll作为参考,并在错误消息中编译结果“程序集生成失败 - 引用的程序集”报告“没有强名称。”然而,我的项目在项目属性中有一个key.snk链接。所以我尝试拆卸,签署与此密钥文件重新组合的dll,为其他地方所描述:

C:\Users\Administrator\Documents\Visual Studio 2010\Projects\MyProj 
\dll>ildasm Reports.dll /out:Reports.il 

C:\Users\Administrator\Documents\Visual Studio 2010\Projects\MyProj 
\dll>ilasm Reports.il /dll /resource=Reports.res /key=..\key.snk 

<output removed for brevity> 

Class 95 
Class 96 
Method Implementations (total): 1 
Resolving local member refs: 0 -> 0 defs, 0 refs, 0 unresolved 
Writing PE file 
Signing file with strong name 
Operation completed successfully 

我结束了一个新的Reports.dll时间戳的到现在。然而,将此作为对我的项目和构建的引用,会提供与以前相同的错误消息。 “报告”参考的属性显示“强名称:假”。

为了不被有点麻烦气馁,我尝试使用强命名工具来重新签署大会:

C:\Users\Administrator\Documents\Visual Studio 2010\Projects\MyProj 
\dll>sn -R Reports.dll ..\key.snk 

Microsoft (R) .NET Framework Strong Name Utility Version 4.0.30319.1 
Copyright (c) Microsoft Corporation. All rights reserved. 

Assembly 'Reports.dll' successfully re-signed 

跑跑SN工具失败,出现错误消息,这可能是值得一提的“Reports.dll不代表强命名的程序集”在运行时之前的反汇编/签名/重组过程。

但是,在反汇编/签名/重组后,在重新将其添加到Visual Studio时,仍然会收到原始错误消息。

+0

的可能重复[集生成失败 - 引用程序集“Interop.Office”不具有强名称](HTTP://计算器.com/questions/6845537/assembly-generation-failed-referenced-assembly-interop-office-does-not-have) – JabberwockyDecompiler 2015-05-19 16:23:56

回答

20

我只是用这个解决了这个问题,在VS 2010:

Project Properties -> Signing -> uncheck Sign the assembly checkbox 
+6

我只是喜欢堆栈溢出。我的问题的99%总是在堆栈溢出的帮助下解决。你们都摇滚! – Karishma 2014-05-02 09:45:53

3

我会建议如果你已经从命令行正确地签署了Reports.dll后,VS仍然说这个DLL是无符号的;那么它必须引用错误的文件。

如果你想成为真正的偏执狂并仔细检查签名后的强命名,请将Reports.dll加载到ildasm中(必须双击树中的清单节点并向下滚动以找到.publickey部分) 。或者为了方便,只需在ILSpy中打开它。

签署reports.dll后;将你的引用项目的proj文件作为一个XML文档打开(如果你有VS PowerCommand,你可以右键点击'Edit Project File';否则你可以卸载项目,然后在VS中使用'Open With'命令打开它打开文件对话框),并确认对dll的引用确实是正确的路径。如果不是,请更正并重新加载项目。

+0

嗨,感谢您的输入。在运行上面的签名命令后,ILSpy(顺便说一下,很好的工具)为Reports.dll报告[assembly:AssemblyKeyFile(“”)]和[assembly:AssemblyKeyName(“”)]。我猜这意味着文件没有实际签名?不过,该文件的时间戳仍然对应于假定的签名。 – 2012-02-22 09:40:47

+0

出于兴趣 - 当您在ILSpy中选择程序集的根节点时,右侧窗格应在前两个注释中显示文件名,然后在第二行显示完整程序集名称。在第二行,程序集名称以',PublicKeyToken = [some_hex_string]'结尾? – 2012-02-22 10:26:15

+1

也是这里'Report.Net'库在这里:http:// sourceforge。net/projects/report /如果是这样你不能打开项目并在VS中用你的密钥文件重建作为构建过程的一部分? – 2012-02-22 10:32:42

相关问题