Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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#_Reference_Compiler Errors_Dependencies_Version - Fatal编程技术网

C# 定位的组件';的清单定义与程序集引用不匹配

C# 定位的组件';的清单定义与程序集引用不匹配,c#,reference,compiler-errors,dependencies,version,C#,Reference,Compiler Errors,Dependencies,Version,我试图在C#Windows窗体应用程序(Visual Studio 2005)中运行一些单元测试,但出现以下错误: System.IO.FileLoadException:无法加载文件或程序集“实用程序,版本=1.2.0.200,区域性=中性,PublicKeyToken=764d581291d764f7”或其依赖项之一。定位的程序集清单定义与程序集引用不匹配。(来自HRESULT的异常:0x8013100)** 在x.Foo.FooGO()上 在Foo.cs中的x.Foo.Foo2(字符串gr

我试图在C#Windows窗体应用程序(Visual Studio 2005)中运行一些单元测试,但出现以下错误:

System.IO.FileLoadException:无法加载文件或程序集“实用程序,版本=1.2.0.200,区域性=中性,PublicKeyToken=764d581291d764f7”或其依赖项之一。定位的程序集清单定义与程序集引用不匹配。(来自HRESULT的异常:0x8013100)**

在x.Foo.FooGO()上

在Foo.cs中的x.Foo.Foo2(字符串groupName_)处:第123行

在FooTests.cs中的x.Foo.UnitTests.FooTests.TestFoo()处:第98行**

System.IO.FileLoadException:无法加载文件或程序集“实用程序,版本=1.2.0.203,区域性=中性,PublicKeyToken=764d581291d764f7”或其依赖项之一。定位的程序集清单定义与程序集引用不匹配。(来自HRESULT的异常:0x8013100)

我查看了我的参考资料,我只参考了
实用程序版本1.2.0.203
(另一个是旧版本)

关于如何找出引用此DLL文件的旧版本的内容,有什么建议吗

此外,我甚至不认为我的硬盘上有这个旧组件。
是否有任何工具可以搜索此旧版本的程序集?

.NET程序集加载器:

  • 找不到1.2.0.203
  • 但是找到了1.2.0.200
此程序集与请求的程序集不匹配,因此出现此错误


简单地说,它找不到被引用的程序集。通过将程序集放在GAC或应用程序路径中,确保它可以找到正确的程序集。另请参见。

您可以做一些事情来解决此问题。首先,使用Windows文件搜索在硬盘上搜索程序集(.dll)。有了结果列表后,请查看->选择详细信息。。。然后检查“文件版本”。这将在结果列表中显示版本号,以便您可以看到旧版本可能来自何处

另外,就像Lars说的,检查你的GAC,看看那里列出了什么版本。声明在GAC中找到的程序集在生成期间不会在本地复制,因此您可能需要在执行“全部重建”之前删除旧版本。(有关为您创建批处理文件的注意事项,请参见我对的回答)


如果仍然无法确定旧版本的来源,可以使用Visual Studio附带的fuslogvw.exe应用程序获取有关绑定失败的更多信息。Microsoft有关于此工具的信息。请注意,您必须通过将
HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Fusion\EnableLog
注册表项设置为1来启用日志记录。

我刚刚遇到这个问题,问题是我的应用程序调试目录中有一个旧的.dll副本。您可能还想在那里(而不是GAC)查看是否看到它。

我自己也遇到了这个问题,我发现这个问题与其他人遇到的问题有所不同

我的主要项目引用了两个dll:companycasses.dll和CompanyControls.dll。我收到一个运行时错误,它说:

无法加载文件或程序集 '公司等级,版本=1.4.1.0, 文化=中立, PublicKeyToken=045746ba8544160c'或 它的一个依赖项。位于 程序集的清单定义不正确 与程序集引用不匹配

问题是,我的系统上没有任何版本号为1.4.1的CompanyClasses.dll文件。GAC中没有,应用程序文件夹中没有…任何地方都没有。我搜索了我的整个硬盘。我所有的CompanyClasses.dll文件都是1.4.2


我发现真正的问题是CompanyControls.dll引用了companycasses.dll的1.4.1版本。我刚刚重新编译了CompanyControls.dll(在引用companycasses.dll 1.4.2之后),这个错误对我来说消失了。

对我们来说,这个问题是由其他原因引起的。DevExpress组件的许可证文件包括两行,一行用于未安装在此特定计算机上的组件的旧版本。从许可证文件中删除旧版本解决了此问题


令人恼火的是,错误消息没有指出是什么引用导致了问题。

如果您使用的是Visual Studio,请尝试“清除解决方案”,然后重新生成项目。

如果您尝试使用反射进行后期绑定,则会引发完全相同的错误,如果要绑定到的程序集具有强名称或其公钥令牌已更改。即使实际上没有找到任何具有指定公钥令牌的程序集,错误也是相同的


您需要添加正确的公钥令牌(您可以使用dll上的sn-T获得它)来解决错误。希望这能有所帮助。

我的情况与内森·贝德福德的《华盛顿邮报》非常相似,但有点扭曲。我的项目也以两种方式引用了更改的dll。1) 直接和2)通过引用本身引用了更改的dll的组件(类库)间接进行。现在,我的组件(2)的Visual studio项目引用了更改的dll的正确版本。但是,组件本身的版本号没有更改。因此,新版本项目的安装未能在客户端计算机上替换该组件

最终结果:直接引用(1)和间接引用(2)指向客户端计算机上更改的dll的不同版本。在我的开发机器上,它工作得很好


决议:删除应用程序;从应用程序文件夹中删除所有DLL;在我的例子中,它是C:\WINDOWS\Microsoft.NET\Framework\~\Temporary ASP.NET Files\目录中DLL的旧版本。您可以删除或替换旧版本,也可以删除并重新添加对项目中DLL的引用。基本上,不管怎样
<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.11.0"/>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <dependentAssembly>
    <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="3.1.0.0" />
  </dependentAssembly>
</assemblyBinding>
<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
<Reference Include="DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
Get-Project -All | Add-BindingRedirect
<dependentAssembly>
    <assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.14.0.0" newVersion="5.5.0.0" />
</dependentAssembly>
  <Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <Version>1.0.0</Version>
  </PropertyGroup>
 - task: DotNetCoreCLI@2
   displayName: 'pack'
   inputs:
     command: pack
     nobuild: true
     configurationToPack: 'Release'
     includesource: true
     includesymbols: true
     packagesToPack: 'MyNugetProject1.csproj;**/MyNugetProject2.csproj'
     versioningScheme: 'byEnvVar'
     versionEnvVar: 'GitVersion.SemVer'