定位的程序集的清单定义与程序集引用不匹配

时间:2008-10-18 13:16:26

标签: c# reference compiler-errors dependencies version

我正在尝试在C#Windows窗体应用程序(Visual Studio 2005)中运行一些单元测试,我收到以下错误:

  

System.IO.FileLoadException:无法加载文件或程序集“Utility,Version = 1.2.0.200,Culture = neutral,PublicKeyToken = 764d581291d764f7”或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)**

     

at x.Foo.FooGO()

     

在Foo.cs中的x.Foo.Foo2(String groupName_):第123行

     

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

     

System.IO.FileLoadException:无法加载文件或程序集'Utility,Version = 1.2.0.203,Culture = neutral,PublicKeyToken = 764d581291d764f7'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

我查看了我的参考资料,我只提到Utility version 1.2.0.203(另一个是旧的)。

关于我如何弄清楚试图引用此旧版本DLL文件的任何建议?

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

58 个答案:

答案 0 :(得分:423)

.NET程序集加载程序无法找到1.2.0.203,但确实找到了1.2.0.200。此程序集与请求的内容不匹配,因此您收到此错误。简单来说,它找不到引用的程序集。通过将其放入GAC或应用程序路径,确保它可以找到正确的程序集。另请参阅http://blogs.msdn.com/junfeng/archive/2004/03/25/95826.aspx

答案 1 :(得分:88)

您可以执行以下操作来解决此问题。首先,使用Windows文件搜索在硬盘驱动器中搜索程序集(.dll)。获得结果列表后,请执行查看 - >选择详细信息...然后选中“文件版本”。这将在结果列表中显示版本号,以便您可以查看旧版本的来源。

此外,与Lars一样,请检查您的GAC以查看其中列出的版本。 This Microsoft article声明在GAC中找到的程序集在构建期间不会在本地复制,因此您可能需要在执行重建之前删除旧版本。 (有关创建批处理文件的说明,请参阅我对this question的回答)

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

答案 2 :(得分:54)

我自己遇到了这个问题,我发现这个问题与其他问题不同。

我的主项目引用了两个DLL:CompanyClasses.dll和CompanyControls.dll。我收到运行时错误说:

  

无法加载文件或程序集   'CompanyClasses,Version = 1.4.1.0,   文化=中性,   PublicKeyToken = 045746ba8544160c'或   其中一个依赖项。位于   程序集的清单定义   与程序集引用不匹配

麻烦的是,我的系统上没有任何版本号为1.4.1的CompanyClasses.dll文件。 GAC中没有,app文件夹中没有...没有任何地方。我查了整个硬盘。我拥有的所有CompanyClasses.dll文件都是1.4.2。

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

答案 3 :(得分:50)

以下将任何程序集版本重定向到3.1.0.0版。我们有一个脚本,它将始终在App.config中更新此引用,因此我们永远不必再次处理此问题。

通过反射,您可以获取程序集publicKeyToken并从.dll文件本身生成此块。

<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>

请注意,如果没有XML命名空间属性(xmlns),这将无效。

答案 4 :(得分:38)

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

答案 5 :(得分:30)

其他答案对我不起作用。如果你不关心版本而你只想要你的应用程序运行,那么右键单击引用并将“特定版本”设置为false ...这对我有用。 enter image description here

答案 6 :(得分:21)

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

答案 7 :(得分:19)

我添加了一个NuGet包,只是为了实现我的应用程序的黑盒部分引用了旧版本的库。

我删除了包并引用了旧版本的静态DLL文件,但是web.config文件从未更新过:

<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>

答案 8 :(得分:15)

就我而言,运行ASP.NET应用程序时发生此错误。 解决方案是:

  1. 删除项目文件夹中的objbin文件夹
  2. 干净没有工作,重建没有工作,所有参考都很好,但它没有写一个库。删除这些目录后,一切都运行良好。

答案 9 :(得分:14)

在我的例子中,它是C:\ WINDOWS \ Microsoft.NET \ Framework \〜\ Temporary ASP.NET Files \目录中的旧版DLL。您可以删除或替换旧版本,也可以删除并添加对项目中DLL的引用。基本上,无论哪种方式都会创建一个指向临时ASP.NET文件的新指针。

答案 10 :(得分:9)

我现在要打动大家。 。

从您的.config文件中删除所有<assemblyBinding>引用,然后从NuGet软件包管理器控制台中运行以下命令:

Get-Project -All | Add-BindingRedirect

答案 11 :(得分:8)

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

令人讨厌的部分是错误消息没有说明引起问题的引用。

答案 12 :(得分:5)

矿井与Nathan Bedford的职位非常相似,但略有不同。我的项目也以两种方式引用了更改后的dll。 1)直接和2)间接引用一个组件(类库),该组件本身具有对已更改的dll的引用。现在我的组件(2)的Visual Studio项目引用了更改后的dll的正确版本。但是,组件本身的版本号未更改。因此,安装新版本的项目无法替换客户端计算机上的该组件。

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

决议:删除申请;从应用程序文件夹中删除所有DLLS;重新安装。就像我的情况一样。

答案 13 :(得分:5)

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

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

答案 14 :(得分:4)

尝试了许多上述解决方案但没有修复后,最终导致确保在Visual Studio中的应用程序中打开了“自动生成绑定重定向”。

enter image description here

有关启用自动绑定重定向的更多信息,请参见:https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/how-to-enable-and-disable-automatic-binding-redirection

答案 15 :(得分:4)

我想补充说我正在创建一个基本的ASP.NET MVC 4项目,并通过NuGet添加了DotNetOpenAuth.AspNet。在为Microsoft.Web.WebPages.OAuth引用了不匹配的DLL文件后,这导致了同样的错误。

为了解决这个问题,我做了一个Update-Package并清理了完整重建的解决方案。

这对我有用,并且是一种懒惰的方式,但时间就是金钱:-P

答案 16 :(得分:4)

我的app.config包含

<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.11.0"/>

表示npgsql。不知何故,在用户的机器上,我的app.exe.config丢失了。我不确定它是否是一个愚蠢的用户,安装程序故障,或尚未解决反病毒。替换文件解决了问题。

答案 17 :(得分:4)

在构建Team Foundation Server的构建服务时出现此错误。原来我在我的解决方案中有多个项目,使用NuGet添加的相同库的不同版本。我用NuGet删除了所有旧版本,并添加了新版本作为所有版本的参考。

Team Foundation Server将所有DLL文件放在一个目录中,当然只能有一个特定名称的DLL文件。

答案 18 :(得分:4)

我的问题是将源代码复制到新机器而不会拉过任何引用的程序集。

我没有做任何事情来修复错误,所以在仓促中,我完全删除了BIN目录。重建了我的源代码,从那时起它就开始工作了。

答案 19 :(得分:4)

我会让某人从我的剪切愚蠢中受益。我对一个完全独立的应用程序有一些依赖(让我们称之为App1)。来自该App1的dll被拉入我的新应用程序(App2)。每当我在APP1中进行更新时,我都必须创建新的dll并将它们复制到App2中。好。 。我厌倦了在两个不同的App1版本之间复制和粘贴,所以我只是简单地添加了一个&#39; NEW _&#39; dll的前缀。

好。 。 。我猜测构建过程会扫描/ bin文件夹,当它与错误匹配时,它会使用与上述相同的错误消息进行barfs。我删除了我的&#34; new _&#34;版本和它建立只是花花公子。

答案 20 :(得分:3)

对我来说,“Local.testtesttings”文件中的代码覆盖率配置“导致”了问题。我忘了更新那里引用的文件。

答案 21 :(得分:3)

我刚刚找到了解决此错误的另一个原因。我从特定库的所有版本清理了我的GAC,并参考与可执行文件一起部署的特定版本构建了我的项目。当我运行项目时,我得到了这个异常,搜索了更新版本的库。

原因是publisher policy。当我从GAC卸载库的版本时,我忘记卸载发布者策略程序集,因此,不使用我本地部署的程序集,程序集加载程序在GAC中找到了发布者策略,告诉它搜索更新的版本。

答案 22 :(得分:2)

清理并重建解决方案可能无法替换输出目录中的所有dll。

我建议尝试重命名&#34; bin&#34;到&#34; oldbin&#34;或&#34; obj&#34;到&#34; oldobj&#34;

然后尝试再次建立你的silution。

如果您正在使用任何第三方dll,那么您需要复制到新创建的&#34; bin&#34;或&#34; obj&#34;成功构建后的文件夹。

希望这对你有用。

答案 23 :(得分:2)

只是删除项目bin文件夹的内容并重建解决方案解决了我的问题。

答案 24 :(得分:1)

我得到了同样的错误...... 在我的情况下,它解决如下:

  • 首先安装应用程序时,此处的人员在应用程序中使用了Microsoft Enterprise Library 4.1。
  • 上周,我的机器被格式化了在那之后,当我构建该应用程序时,它给了我一个错误,企业库程序集缺失。
  • 然后我安装了Microsoft Enterprise Library 5.0,我在谷歌上作为第一个搜索条目。
  • 然后当我构建应用程序时,它给了我上面的错误,即找到的程序集的清单定义与程序集引用不匹配。
  • 经过大量的搜索工作&amp;分析,我发现应用程序是指4.1.0.0&amp; bin文件夹中的DLL版本为5.0.0.0
  • 然后我安装了Microsoft Enterprise Library 4.1。
  • 删除了之前的参考文献(5.0)&amp;添加了4.0参考。
  • 构建应用程序&amp;瞧......它有效。

答案 25 :(得分:1)

这是解决此问题的方法。

  1. 从异常消息中,获取“问题”库的名称和“预期”版本号。
  2. enter image description here

    1. 在解决方案中找到该.dll的所有副本,右键单击它们,然后检查它的.dll版本。
    2. enter image description here

      好的,所以在这个例子中,我的.dll肯定是2.0.5022.0(所以Exception版本号错了)。

      1. 搜索解决方案中所有 .csproj 文件的“例外”消息中显示的版本号。将此版本号替换为dll中的实际数字。
      2. 所以,在这个例子中,我会替换它......

        <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" />
        

        完成工作!

答案 26 :(得分:1)

如果您收到错误,例如&#34; 找到的程序集的清单定义与程序集引用不匹配&#34;如果您通过项目&gt;进行了更新在VS 中管理NuGet包和更新选项卡,您可以做的第一件事是在检查NuGet Gallery page中的版本并从Package Manager控制台运行以下命令后尝试安装另一个版本的包:

PM> Install-Package YourPackageName -Version YourVersionNumber 
//Example
PM> Install-Package Microsoft.Extensions.FileProviders.Physical -Version 2.1.0

虽然答案与有问题的方案没有直接关系,而且它被问到回来了,但它是一种通用的,仍然相关,希望它可以帮助某人。

答案 27 :(得分:1)

我遇到了同样的错误,但就我而言,我在本地将自定义 nuget 包运行到另一个项目中。

为我修复的是将包版本更改为错误中请求的版本。

包在 netstandard 2.1 中,请求包的项目在 netcore 3.1 中

enter image description here

答案 28 :(得分:1)

从文件夹位置手动删除旧程序集,然后添加对新程序集的引用可能有所帮助。

答案 29 :(得分:1)

在我的情况下,问题出在椅子和键盘之间: - )

Could not load file or assembly 'DotNetOpenAuth.Core, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=2780ccd10d57b246' or one of its dependencies.
The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)

两个或更多不同的程序集想要使用不同版本的DotNetOpenAuth库,这不会有问题。此外,在我的本地计算机上,NuGet自动更新了web.config:

<dependentAssembly>
    <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
    </dependentAssembly>
    <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>

然后我意识到我忘了将新的web.config复制/部署到生产服务器。因此,如果您手动部署web.config,请检查它是否已更新。如果生产服务器的web.config完全不同,则必须在使用NuGet后同步合并这些dependentAssembly部分。

答案 30 :(得分:0)

我得到了:

  

无法加载文件或程序集“ XXX-new”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040)

这是因为我将程序集的名称从XXX.dll更改为XXX-new.dll。将名称恢复为原始名称可修复错误。

答案 31 :(得分:0)

运行迁移器以从使用 packages.config 升级到 PackageReference 为我轻松修复了此错误。如果您运行的是 Visual Studio 2017 版本 15.7 或更高版本,则可以按照以下步骤进行升级。

https://docs.microsoft.com/en-us/nuget/consume-packages/migrate-packages-config-to-package-reference#migration-steps

以下是步骤(从上面的链接复制):

<块引用>
  1. 使用 packages.config 打开包含项目的解决方案。

  2. 在解决方案资源管理器中,右键单击“引用”节点或 package.config 文件,然后选择将 packages.config 迁移到 包参考....

  3. 迁移器分析项目的 NuGet 包引用并 尝试将它们分类为顶级依赖项 (NuGet 直接安装的软件包)和传递依赖项 (作为顶级包的依赖项安装的包)。

注意:PackageReference 支持传递包还原和解析 动态依赖,这意味着传递依赖需要 未明确安装。

  1. (可选)您可以选择将 NuGet 包分类为 通过选择传递依赖作为顶级依赖 包的顶级选项。这个选项是自动设置的 包含非传递性资产的包(那些在 build、buildCrossTargeting、contentFiles 或分析器文件夹)和 那些标记为开发依赖项(developmentDependency = “真”)。

  2. 检查所有软件包兼容性问题。

  3. 选择“确定”开始迁移。

  4. 在迁移结束时,Visual Studio 会提供一份报告,其中包含 备份路径、已安装包列表(顶级 依赖项),作为可传递引用的包列表 依赖项,以及在 迁移的开始。报告将保存到备份文件夹中。

  5. 验证解决方案构建和运行。如果遇到问题, 在 GitHub 上提出问题。

答案 32 :(得分:0)

您是否可能在 assemblyBinding 中使用了错误的 nugget 版本尝试:

  1. 删除 web.config/app.config 中的所有程序集绑定内容:
<块引用>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.3.0" newVersion="3.1.3.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Extensions.DependencyInjection" publicKeyToken="adb9793829ddae60" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.3.0" newVersion="3.1.3.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0" />
  </dependentAssembly>
</assemblyBinding>
  1. 在包管理器控制台中输入:Add-BindingRedirect
  2. 生成所有必要的绑定重定向
  3. 运行您的应用程序,看看它是否正常工作。如果没有,请添加包控制台错过的任何缺失的绑定重定向。

答案 33 :(得分:0)

这个问题已经很老了,最近我在Azure DevOps Yaml管道和Dotnet Core 3.1中也遇到了同样的错误消息。该问题与尝试解决的其他答案有所不同,所以我将分享我的解决方案。

我有一个针对自己的nuget包的许多项目的解决方案。我偶然在* .csproj文件中添加了以下版本标签:

  <Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <Version>1.0.0</Version>
  </PropertyGroup>

我使用Yaml将所有项目的nuget程序包打包了DotnetCoreCLI @ 2任务:

 - 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'

问题在于* .csproj文件中的版本与环境变量GitVersion.SemVer(由input-“ versionEnvVar”指定)中的版本不匹配。

在删除* .csproj文件中的所有<Version>1.0.0</Version>标记后,dll的Assembly / fileversion由环境变量自动分配,并且nuget和dll(assembly / fileversion)将具有相同的版本和问题解决了。​​

答案 34 :(得分:0)

这种问题的一般答案是像其他答案一样使用绑定重定向。但是,这只是问题的一部分-您需要知道所使用的程序集文件的正确版本。 Windows属性并不总是准确的,而nuget也并不总是准确的。

获取正确版本信息的唯一方法是分析文件本身。 dotPeek是一种有用的工具。根据我的经验,dotPeek中列出的程序集名称始终准确。

因此,例如,此文件的正确绑定如下:

<dependentAssembly>
    <assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0"/>
</dependentAssembly>

Windows资源管理器说文件是4.6.26515.06,nuget说文件是5.0.0.0。 dotPeek表示它是4.2.1.0,并且在我们的软件中可以正常运行。另外请注意,公钥和文化很重要,dotPeek也会显示此信息。

dotPeek vs Windows version information

答案 35 :(得分:0)

尝试从webConfig / appConfig中删除程序集引用

 <dependentAssembly>
        <assemblyIdentity name="System.IO" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.3.0.0" />
      </dependentAssembly>

答案 36 :(得分:0)

我为此感到难过一段时间。我可以在发行版中构建和运行,由于引用与清单不匹配而无法在调试中运行。我必须检查引用一百次,并删除所有dll。我注意到调试和发行版中生成的清单是不同的。

我在项目/属性中删除了app.manifest,它解决了问题。这不包括提及被引用的dll的问题-因此我不知道为什么这会引起问题。

答案 37 :(得分:0)

用蛮力解决了我的问题。

我意识到我在整个解决方案和两个不同版本中都分发了DLL的多个副本。

进入资源管理器中的解决方案,搜索有问题的DLL并将其全部删除。然后使用该DLL的一个版本将对DLL的引用添加回去。

答案 38 :(得分:0)

我有类似的问题,但没有答案适合我。

最适合我的解决方案是手动从项目文件(YourProject.csproj)中删除 publicKeyToken 部分。

以前是:

<Reference Include="Utility, Version=0.0.0.0, Culture=neutral, PublicKeyToken=e71b9933bfee3534, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>dlls\Utility.dll</HintPath>
</Reference>

更改后为:

<Reference Include="Utility, Version=1.0.1.100, Culture=neutral, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>dlls\Utility.dll</HintPath>
</Reference>

请确保SpecificVersionFalse

答案 39 :(得分:0)

请在Visual Studio调试器中运行代码。请运行直到得到例外。将出现Visual Studio异常UI。请阅读Visual Studio Exception底部的“完整详细信息” /“显示详细信息”。在完整的详细信息/显示详细信息中,它告诉我我的一个项目(指的是我的主项目具有不同的版本  (Microsoft.IdentityModel.Clients.ActiveDirectory)。就我而言,我的单元测试项目正在调用我的项目。我的单元测试项目和我的项目具有不同版本的Microsoft.IdentityModel.Clients.ActiveDirectory。执行单元测试时出现运行时错误。

我刚刚用主项目的相同版本更新了单元测试项目的版本。它为我工作。

答案 40 :(得分:0)

没有解决方案对我有用。我尝试了干净的项目解决方案,删除了bin,更新了程序包,降级了程序包等等。。。两个小时后,我从带有程序集的项目中加载了默认的App.config,在那儿我更改了错误的参考版本:

<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>

此后,我清理了项目,再次构建它,它开始工作。没有警告没问题。

答案 41 :(得分:0)

为我System.ValueTuple

  

意外错误,无法加载文件或程序集'System.ValueTuple,   版本= 4.0.1.0,文化=中性,PublicKeyToken = cc7b13ffcd2ddd51'或   它的依赖项之一。系统找不到指定的文件。

通过在发生错误的计算机上安装.NET Framework 4.7.2 Runtime来解决此问题。简单,无需添加bindingRedirect,修改GAC或降级NuGet软件包等。

https://dotnet.microsoft.com/download/dotnet-framework/net472

答案 42 :(得分:0)

检查项目属性中的licenses.licx,您会在此处找到错误的版本。...它在主动报表刷新中对我有用

答案 43 :(得分:0)

在我的单元测试项目中,我也遇到了同样的错误,并导致测试失败。我仔细检查了我在Assembly Explorer中使用的程序集版本,并检查了runtime / dependentassembly标签的内容,发现在那里仍在引用我正在使用的程序集的其他版本。因为这是我的测试项目app.config中的唯一指令,所以我只是尝试删除整个app.config文件,重新构建解决方案,然后就成功了!对我来说没有更多参考错误了:)

答案 44 :(得分:0)

由于引用了与我正在构建的程序集同名的程序集,因此收到此错误消息。

这已编译,但它用当前项目程序集覆盖了引用的程序集 - 从而导致错误。

要修复它,我通过右键单击项目并选择“属性”来更改项目名称和组件属性。

答案 45 :(得分:0)

在这篇文章中提到过类似的问题“关于我如何找出要尝试引用此DLL文件旧版本的任何建议?”

需要哪个程序集仍然引用旧的ODATA客户端6.15.0,ildasm帮助我缩小了范围(无需访问基本代码,只能通过在服务器上部署的pkg进行访问)。

下面的屏幕快照提供了快速摘要。

DeveloperPackge(如果没有ildasm.exe) https://www.microsoft.com/net/download/visual-studio-sdks

ildasm usage to resolve assembly mismatch issue

答案 46 :(得分:0)

尝试更新网站的一个DLL文件时遇到了类似的问题。

当我通过FTP将此DLL文件复制到bin文件夹时,发生了此错误。

我通过以下方式解决了这个问题:

  1. 停止网站;
  2. 复制所需的DLL文件/ DLL文件;
  3. 启动网站

答案 47 :(得分:0)

我的问题是在新版本中删除了旧dll的部署。 为了解决这个问题,我刚刚选中此框以在发布时删除目的地的其他文件。 Remove additional files at destination

答案 48 :(得分:0)

我在运行单元测试用例时遇到了同样的问题。

错误清楚地表明问题是:当我们尝试加载程序集时,.NET程序集加载程序会尝试根据其清单数据(引用的程序集名称,公钥标记,版本)加载其引用的程序集。

检查清单数据:

  1. 打开Visual Studio命令提示符
  2. 键入'ildasm'并将所需的程序集拖到ILDASM窗口并打开MANIFEST视图。有时MANIFEST包含一个程序集,其中包含两个版本的旧版本以及新版本(如Utility, Version=1.2.0.200Utility, Version=1.2.0.203)。实际上,引用的程序集是Utility, Version=1.2.0.203(new version),但由于清单包含偶数Utility, Version=1.2.0.200(old version),.NET程序集加载程序会尝试找出这个版本化的DLL文件,无法查找,因此抛出异常。
  3. 要解决此问题,只需将每个项目相关程序集分别拖到ILDASM窗口,并检查哪个从属程序集包含旧程序集版本的清单数据。只需重建此依赖程序集并将其引用回您的项目。

答案 49 :(得分:0)

在AssemblyInfo.cs文件的AssemblyVersion中,使用固定版本号而不是指定*。 *将更改每个编译的版本号。在我的情况下,这就是这个例外的问题。

答案 50 :(得分:0)

这个问题已经有了答案,但如果NuGet包在同一解决方案中的不同版本中出现问题,您可以尝试以下方法。

打开NuGet Package Manager,因为您看到我的服务项目版本与其他版本不同。

然后更新包含旧版软件包的项目。

Enter image description here

答案 51 :(得分:0)

好的,还有一个答案。我以前创建的应用程序为64位,并相应地更改了输出路径(项目/属性/构建/输出/输出路径)。最近我将应用程序更改为32位(x86),创建了一个新的输出路径。我创建了一个快捷方式,指向思考编译的.exe所在的位置。无论我对源进行了哪些更改,它都会显示不匹配的错误。经过大约一个小时的挫折之后,我碰巧检查了.exe文件的日期/时间,看到它很老了,显然引用了旧的.dll&#39; s。 我正在将应用程序编译到旧目录中,我的快捷方式是引用较新的。将输出路径更改为.exe 应该去的位置,运行快捷方式并且错误消失了。 (拍前额)

答案 52 :(得分:0)

我在使用内部包存储库时遇到了这个问题。我已将主包添加到内部存储库,但不是包的依赖项。确保将所有依赖项,依赖项依赖项,递归等添加到内部存储库中。

答案 53 :(得分:0)

如果您将AssemblyInfo.cs与AssemblyVersion标记一起使用并且.csproj文件具有不同的值,也会发生这种情况。通过匹配AssemblyInfo或删除所有部分,问题就会消失。

答案 54 :(得分:0)

我今天遇到了同样的问题,导致我在实体框架中进行更改后无法执行添加迁移。

我的解决方案中有两个项目,让我们打电话给他们&#34;客户&#34;和&#34;数据&#34; - 一个包含我的EF模型和上下文的类库项目。客户端引用了数据项目。

我签了两个项目,后来又对EF模型进行了更改。删除签名后,我可以添加迁移,然后可以重新签署项目。

我希望这对某些人有用,可以避免他们长期受挫..

答案 55 :(得分:0)

开始使用InstallShield后出现此问题。即使构建顺序显示安装项目是最后一个,它也是乱序构建的。

我通过让所有其他项目依赖它来纠正这个问题 - 这迫使安装最后构建,从而消除了我的程序集不匹配。我希望这会有所帮助。

答案 56 :(得分:-4)

右键单击VS中的引用,将“特定版本”属性设置为True。

答案 57 :(得分:-4)

尝试将缺少的内容添加到全局程序集缓存中。