错误CS1705:"其版本高于引用的程序集"

jbi*_*zle 93 .net web-deployment

我现在一直在研究这个问题并且没有得到解决.我收到以下错误消息:

Compiler Error Message: CS1705: Assembly 'My.Model, Version=1.1.4422.23773, Culture=neutral, 
PublicKeyToken=bfde95ba233094b2' uses 
'Common, Version=3.3.4273.24368, Culture=neutral, PublicKeyToken=bfde95ba233094b2' 
which has a higher version than referenced assembly
'Common, Version=3.3.4269.17112, Culture=neutral, PublicKeyToken=bfde95ba233094b2'

c:\WINDOWS\assembly\GAC_MSIL\Common\3.3.4269.17112__bfde95ba233094b2\Common.dll: 
(Location of symbol related to previous error)
Run Code Online (Sandbox Code Playgroud)

Web服务器正在运行Server 2003.我去了c:\ windows\assembly并且确实注意到列出了3个版本的Common.dll.列出的最高版本是3.3.4269.17112

我将版本为3.3.4273.24368的dll复制到汇编目录中.然后我重新编译并重新部署了我的代码(可能是矫枉过正但是很好).当我在新会话中打开浏览器并再次访问网站URL时,我仍然收到相同的消息.

我可以使用Windows资源管理器并验证现在还列出了更高版本的Common.dll.

我还可以考虑解决这个问题吗?我不想将程序集中的引用更改为指向旧版本.

Nic*_*oul 50

(除了Jakub的想法)

我有这个错误,因为"重建"并没有真正重建.
关闭Visual Studio,真的去删除bin文件夹,然后重建,它可能会更好.

此外,有时Visual Studio的谎言有关引用,所以请检查HintPath您的.csproj文件.

  • 这个救了我的培根。在本地运行是可以的,但是我发布了一项更改,事情变得古怪。删除联机bin文件夹的内容将使内容恢复同步。谢谢! (2认同)

Jak*_*cki 36

3个想法让你尝试:

  1. 确保所有dll都是针对相同版本的Common编译的.
  2. 检查解决方案中是否包含项目引用而不是文件引用.
  3. 在web.config中使用绑定重定向.(最初在返回机器上链接的版本)


Cou*_*ero 34

如果您正在使用NuGet,那么值得去"管理解决方案的NuGet包",查找导致问题并进行更新的软件包.然后它应该将所有软件包带到最新版本并解决问题.

值得一试,因为它快速而简单.

  • 确保在解决方案级别而不是项目级别更新NuGet包. (3认同)
  • 这为我解决了,谢谢。但是我的情况略有不同:更新中没有列出它,因此我必须去安装,并且有一个窗口显示每个项目的软件包版本。我正在将一些旧模块升级到cms的新版本,因此我必须转到有问题的软件包,选择它们并单击安装。可能是因为cms刚刚转换为使用nuget,但您为我省去了很多繁琐的`csproj`编辑工作! (2认同)
  • 当然,这绝对应该是被接受的答案,我没有读过这篇文章,但是无意中尝试了我的解决方案,就像一个魅力。 (2认同)

小智 27

我的问题是我有2个项目引用了同一个dll的2个不同副本,这些副本有不同的版本.我通过删除它们并确保它们引用相同的dll文件来修复它.


小智 12

一个可能的原因是第二个组件安装在GAC中,而第一个具有更高版本号的组件被添加到项目的参考中.要验证这一点,请双击项目引用中的程序集,并检查对象浏览器中是否有另一个具有相同名称的程序集.

如果是这种情况,请使用gacutil.exe实用程序从GAC卸载第二个程序集.例如,如果这些是64位程序集:

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\gacutil.exe -u <assembly_name>
Run Code Online (Sandbox Code Playgroud)


小智 10

更新一些实体框架 NuGet 包后,我在 Visual Studio 2019 上也发生了类似的情况。也许有人可能会偶然发现与实体框架或其他一些 NuGet 包相关的问题。

就我而言,项目依赖项指的是比依赖项目(包含引用)更高版本的 Nuget 包。

由于某种原因,文件中的.csproj条目PackageReference包含Microsoft.EntityFrameworkCore.Tools标签PrivateAssets。这意味着,查看文档

这些资产将被消耗但不会流向父项目

在我的例子中,所需的行为是让父项目包含依赖项目及其依赖项,因为这可以减少相关项目之间 NuGet 包的重复。

因此,将.csproj子项目的文件更改为:

<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.11">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
Run Code Online (Sandbox Code Playgroud)

到:

<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.11" />
Run Code Online (Sandbox Code Playgroud)

并重建,解决了问题。