Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 错误:需要具有强名称的程序集_C#_.net - Fatal编程技术网

C# 错误:需要具有强名称的程序集

C# 错误:需要具有强名称的程序集,c#,.net,C#,.net,我有一个Windows窗体项目(VS2005、.NET2.0)。该解决方案引用了9个项目。在我的一台电脑上,一切都运行良好。当我把它移到第二台计算机上时,9个项目中的8个可以毫无问题地编译。当我尝试编译第9个项目(应用程序的主项目-生成用于执行应用程序的.exe文件)时,出现以下错误: 'Error 3: A strongly-named assembly is required. (Exception from HRESULT: 0x80131044)' 错误的文件位置列为“C:\PATH-

我有一个Windows窗体项目(VS2005、.NET2.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时遇到了相同的错误

正在使用的第三方程序集:

  • ComponentFactory.Krypton.Toolkit
  • ComponentFactory.Krypton.Navigator
  • VistaDB.NET20
所有这些都在解决方案中的其他项目中引用,这些项目构建时没有任何问题,因此看起来这些都不是问题所在


到目前为止,我已尝试删除suo文件、重新生成全部、从解决方案中卸载和重新加载项目、删除和读取引用的程序集。没有任何效果。

在解决方案资源管理器中检查每个项目的引用部分……查找对第三方供应商程序集的引用,如Infrastics或Data D可能未安装在您遇到问题的机器上的Dynamics等。Ok,不确定这是否有帮助,但如果您可以访问ildasm,请检查三个第三方程序集并检查以下内容:

(我在你的错误消息上发现了以下内容)它来自另一个家伙的帖子,所以忽略这些名字,但关键是在清单中的行应该是“.publickeytoken”not“.publickey” 指向此线程的链接位于:

看起来不错,对吧?那个序列实际上是reflect.dll的公钥标记

如果我们使用ildasm gui并单击“清单”,可以看到问题:

请注意
.publickey

应该是
.publickeytoken

问题在于,Cecil模块在创建修改后的程序集时,会将公钥令牌放在公钥字段中(或者忘记打开一些标志,表明这是一个令牌,而不是一个完整的公钥。我不知道细节)

所以这相当于塞西尔的一个可能的错误。我应该用盖尔的东西来代替

无论如何,现在我知道原始脚本(在我转到Cecil之前)的唯一问题是,它将对非强名称程序集(reflect)的引用放在强名称程序集(FXCOP)中


所以我现在修复了它,重新运行了我的原始脚本。。。中提琴!它起作用了

可能需要明确指定目标平台并将其设置为x86。64位版本可能有问题


另一件事:您是否以管理员身份运行VS?VS2005在Vista上不使用elevation运行时会出现问题,可能这个奇怪的编译错误就是其中之一。

我只是通过执行以下操作来构建它:


该项目的属性中有一个许可证文件。删除文件(不再需要)后,项目能够成功构建。看来这就是罪魁祸首。

我一直在使用许多第三方库(MS Ent Lib),并决定将一些dll移到一个“未使用”的文件夹中。这给了我一个有问题的错误。我相信我引用的一个库实际上引用了另一个需要放在它旁边的库(即使在项目中不需要引用dll)


将库向后移动后,所有编译的内容都没有出现此错误。

我已从项目文件夹中删除了许可证文件,并重新生成,该文件已成功生成。

另一个可能的原因: (对于绝望的疑难解答者)


解决方案资源管理器窗口中,如果您沿着引用列表向下走,并在属性窗口中检查每个引用,看到属性strong Name=False表明存在潜在问题。

对我来说是一个奇怪的修复,但我刚刚从源代码管理中提取了此解决方案

遇到此错误时,检查了上面的大多数答案,然后删除了该解决方案并从源代码管理中重新提取该解决方案

成功了

将只适用于少数人,但我想我是少数人之一,所以会有更多。不知道第一次发生了什么,但不知为什么,当我把一些组件拉过来时,它们一定有一些问题

基本上是将其关闭并再次打开。

错误的含义 “强名称:表示引用已使用密钥对签名。”

如果当前项目的程序集已签名,则所有引用程序集也必须签名否则将导致此错误。


如何检查 解决方案资源管理器>引用>[单击有问题的引用]>属性


如何修复 方法1:取消对当前项目程序集的签名

项目属性>签名>对程序集签名(复选框)

方法2:签署参考项目的组件。(如果你自己建造的话
Public Key or Token: ab 1a 81 37 f9 79 0c 88 
.assembly extern Reflex
{
.publickey = (2F 5A 20 3A 86 D3 5F 71 ) // /Z :.._q
.ver 1:0:0:0
}