我有一个Windows窗体项目(VS 2005,.net 2.0)。该解决方案引用了9个项目。在我的一台计算机上,一切正常并且编译良好。当我将它移动到第二台计算机时,9个项目中的8个编译没有任何问题。当我尝试编译第9个项目(应用程序的主项目 - 生成.exe文件来执行应用程序)时,我收到以下错误:
'Error 3: A strongly-named assembly is required. (Exception from HRESULT: 0x80131044)'
错误的文件位置列为“C:\ PATH-TO-APP \ LC”。
我已经检查了项目属性,并且所有项目都设置为在调试模式下构建,它们都不应该被签名。在失败的项目中,它引用的唯一不在任何其他项目中的程序集是Microsoft.VisualBasic(.net 2.0程序集)。因此,我无法找到导致此错误的ID(错误消息中上面引用的文件 - “LC” - 不存在。
任何人都知道如何强制项目接受所有未签名的程序集,或者确定哪个程序集是罪魁祸首?
开发环境与当前环境之间的开发环境之间唯一有意义的区别是第一个是XP,这是Vista64。但是,我的一位使用XP的同事也遇到了同样的错误。
正在使用的第三方程序集:
所有这些都在解决方案中的其他项目中被引用,这些项目没有任何问题,因此看起来不是这些问题。
到目前为止,我已尝试删除suo文件,Rebuild All,从解决方案中卸载和重新加载项目,删除和读取引用的程序集。没有任何效果。
答案 0 :(得分:13)
转到项目属性,然后在左侧导航/菜单中选择签名,如果选中“签署程序集”,则取消选中该项。这仅仅意味着一个强命名的程序集引用一个弱命名的程序集。然后CLR抛出FileLoadException
答案 1 :(得分:10)
我只是通过以下操作来构建它:
有问题的项目的属性中有许可证文件。删除文件后(不再需要),项目能够成功构建。所以看起来这就是罪魁祸首。
答案 2 :(得分:4)
我已从“我的项目文件夹”中删除了许可文件,并再次重新构建,它已成功构建。
答案 3 :(得分:1)
检查解决方案资源管理器中每个项目的参考部分...查找对可能未在您遇到问题的计算机上安装的第三方供应商程序集(如Infragistics或Data Dynamics等)的引用
答案 4 :(得分:1)
好的,不确定这是否有帮助,但如果您有权访问ildasm,请检查三个第三方程序集并检查以下内容:(我在您的错误消息上发现了以下Google搜索)来自其他人的帖子,所以请忽略名称,但关键是清单内的行应该读为“.publickeytoken”而不是“.publickey” 链接到此主题位于:
http://social.msdn.microsoft.com/Forums/en-US/clr/thread/56e13ab1-4c03-4571-92f1-759081bcc78b/
Public Key or Token: ab 1a 81 37 f9 79 0c 88
好的,好吗?该序列确实是Reflex.dll的公钥标记。
如果我们使用ildasm gui并点击“manifest”,可以看到问题:
.assembly extern Reflex
{
.publickey = (2F 5A 20 3A 86 D3 5F 71 ) // /Z :.._q
.ver 1:0:0:0
}
注意.publickey行。
应该说.publickeytoken !!!
问题是Cecil模块在创建修改后的程序集时,会将公钥令牌放入公钥字段中(或者忘记打开一些标志,表明这是令牌,而不是完整的公钥。我我不知道细节。
所以这相当于塞西尔的一个可能的错误......我本应该使用盖尔的东西...... :)
无论如何,现在我知道原始脚本的唯一问题(在我搬到Cecil之前)是它在强名命的程序集(FXCOP)中引用了一个非强名称程序集(Reflex) 。
所以我现在解决了这个问题并重新运行了我的原始剧本......中提琴!它有效!!
答案 5 :(得分:1)
我一直在使用许多第三方库(MS Ent Lib),并决定将一些dll移动到'未使用'文件夹。这给了我有问题的错误。我相信我引用的其中一个库实际上引用了另一个需要与它并排放置的库(即使dll不需要在项目中引用)。
将库移回后编译的所有内容都没有出现此错误。
答案 6 :(得分:0)
可能是您必须明确指定目标平台并将其设置为x86。 64位版本可能存在问题。
另一件事:你是否以管理员身份运行VS? VS2005在Vista上没有运行升级时会出现问题,也许这个奇怪的编译错误就是其中之一。
答案 7 :(得分:0)
对我来说是一个奇怪的修复程序,但是我刚刚从源代码管理中撤回了此解决方案。
遇到此错误时,请仔细阅读上面的大多数答案,然后删除解决方案,然后从源代码管理中重新拉出解决方案。
工作。
仅适用于少数几个,但我想我是少数几个之一,所以会有更多。不知道第一次发生了什么,但是当我将它们拉过时,某些组件肯定会遇到一些问题。
基本上将其关闭然后再打开。
答案 8 :(得分:0)