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

我已经研究了一段时间,还没有解决这个问题:

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)

Web 服务器正在运行 Server2003。我转到 c: windows 程序集,并且确实注意到列出了3个 Common.dll 版本。列出的最高版本是3.3.4269.17112

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

我可以使用文件资源管理器并验证更高版本的 Common.dll 现在也列出来了。

为了解决这个问题,我还能做些什么?我不想更改程序集中的引用以指向旧版本。

184037 次浏览

你可以尝试以下三种方法:

  1. 确保所有 dll 都是根据同一版本的 Common 编译的。
  2. 检查解决方案中是否有项目引用而不是文件引用。
  3. 在 web.config 中使用 绑定重定向(原始链接版本在返回机上)

我犯这个错误是因为“重建”并不是真正的重建。

解决方案: 关闭 VisualStudio,真的去删除 bin 文件夹,然后重建,它可能会工作得更好。

此外,有时 VisualStudio 会隐瞒引用,所以请检查 .csproj文件中的 HintPath

转到 Reference 并添加导致问题的 dll 文件的新引用,并确保所有 dll 都是根据相同的版本编译的。对我有用,希望对你也有用。

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

我的团队刚刚在构建环境中遇到了这个问题。该问题是由于。Csproj 文件。

公共程序集具有到包含引用程序集的目录的正确相对路径。依赖程序集具有来自以前目录结构的路径。解决方案成功地在开发计算机上编译,因为 GAC 解析了依赖项对安装在 C: Program Files 中的正确版本的引用。构建环境具有它回退到的程序集的遗留安装(即使它本应该没有遗留安装) ,因此出现了错误。在文本编辑器中更新 < HintPath > 纠正了这个问题。

我也遇到过类似的问题,我创建了一个 DLL,也就是 A.DLL,它引用了其他的 DLL,也就是 B.DLL。

我创建了一个应用程序 C.exe 并引用了 DLL A.dll 和 B.dll。

解决方案——在从 c.exe 中删除 B.dll 引用时,我能够修复这个问题。

希望这个能帮上忙。

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

如果是这样的话,使用 gacutil.exe 实用程序从 GAC 卸载第二个程序集。例如,如果这些是64位程序集:

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\gacutil.exe -u <assembly_name>

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

值得一试,因为又快又简单。

也有过类似的问题。我的问题是,在同一个解决方案中有几个项目,每个项目都引用了 DLL 的特定版本,但是版本不同。解决方案是在所有引用的所有属性中将“具体版本”设置为 false。

我知道,在尝试了上面的一些步骤之后,很久以前就有人问过这个问题了。帮助我的是以下步骤和 这篇文章

我定位了引用并将 PublicKeyToken 从被引用的那个更改为旧的那个。

我希望这也能帮上忙。

在您的项目中查找引用 系统,网络,Mvc检查版本。

然后右键单击 参考资料-> 程序集并搜索 system.web.mvc 和 设计

这个问题导致了这些 装配的不同版本。

编辑: 然后选择管理 NuGet 包并安装更新 (如果您有多个项目,也可以对它们进行更新。)

重要的更新是 微软,AspNet,Mvc微软。网络。编译器不要忘记它!

手工制作的 dll 收集文件夹
如果您的解决方案有来自不同库的 dll 文件的垃圾文件夹
libsourcelibs等。
如果您(第一次)在 VisualStudio 中打开解决方案,就会遇到这种麻烦。并且您的 dll 收集文件夹以某种方式丢失,或者丢失具体的 dll 文件。

VisualStudio 将尝试用 dll 引用来替代某些内容。如果 VS 成功,那么对于您的本地解决方案,新的引用将是持久的。不适用于其他克隆/结帐。

例如,您的 <HintPath>将被忽略,您的项目文件(. csproj)将不会被更改。
作为我的例子

<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\lib\DocumentFormat.OpenXml.dll</HintPath>
</Reference>

DocumentFormat.OpenXml将从 C:\Program Files (x86)\Open XML SDK\V2.5\lib引用,而不是从 solution\..\lib文件夹引用。

快速解决方案

  • 检查并恢复您的 dll 的收集文件夹
  • 从解决方案资源管理器执行 卸载项目,然后执行 重装计划

正确的解决方案 是迁移到 NuGet 包管理器。

对于 SharePoint,请确保在根文件夹下没有包含 DLL 的“ bin”文件夹,如果有,请删除它。(并在 VS 中将“ CopyLocal”更改为 false)。

在我们的团队中,我们使用 Git 在不同的计算机上工作。有人更新了 dll,但我没有。我只是更新了我的依赖关系引用,问题就解决了。

网站项目中的引用存储在其 web.config 文件中。

我花了一些时间查看解决方案中的所有引用,然后才意识到我已经忘记了 web.config 文件中的引用。

我在 UnitTestingProject 中遇到了同样的问题,在 MainProject 中我使用了“ System。韦伯。Mvc,Version = 3.0.0.0”,在 UnitTestingProject 中,我使用了“ System。韦伯。Mvc,Version = 3.0.0.1”

中更改以下内容 < 参考文献包括 = “ System. Web. Mvc,Version = 3.0.0.0,Culture = Central,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL”> < HintPath > . . package Microsoft. AspNet. Mvc.3.0.50813.1 lib net40 System. Web. Mvc.dll

我也有同样的错误。我在将 Microsoft.AspNetCore.ALL安装到测试项目后修复了这个错误。

如果解决方案中的多个项目中的 nuget 包有所不同,就会出现这个问题。

您可以通过使用 SOLUTION 中的所有项目更新 Uget 包的通用版本来解决这个问题

在将 EpiserverFind 添加到我们的站点并为 EpiserverFind 安装相应的 NuGet 包之后,我得到了这个。

修复很简单: 同时更新所有 Episerver 相关的附加组件(即使它们看起来毫不相关: CMS、 CMSTinyMCE、 CMSUI 等等)

在更新所有可能的 Episerver 附加组件并重新编译之后,错误消失了。

在我的场景中,我编辑了。我的 dotnetCore 应用程序的 csproj 文件。我注意到 TargetFramework标记的值为 Netcoreapp2.1,而 运行时框架版本标记的值为 2.0版本。因此,我将 运行时框架版本改为 2.1.0,保存,重新启动 VS 并重新构建,然后它解决了错误。

希望这个能帮到你。

祝你好运,

苏格山

我手动删除 bin 和 obj 文件夹,重建,它工作

我在 VisualStudio2019上更新了一些实体框架 NuGet 包之后也发生了类似的事情。也许有人会偶然发现这个与实体框架或其他 NuGet 包有关的问题。

在我的例子中,项目依赖项引用的是比依赖项更高版本的 Nuget Package (包含引用)。

由于某种原因,在 .csproj文件中,Microsoft.EntityFrameworkCore.ToolsPackageReference条目包含标记 PrivateAssets:

这些资产将被使用,但不会流向父项目

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

因此,将子项目的 .csproj文件从:

<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.11">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

致:

<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.11" />

重建,解决了问题。

对我来说,一个自定义的坚果包中使用的项目是使用较高的版本的 牛顿软件,杰森和项目是使用较低的版本的 牛顿软件,杰森。 更新定制包中使用的项目 牛顿软件,杰森 nugetPackage > = 牛顿软件,杰森 nugetPackage。

对我来说,这是因为我认为其中一个项目已经更新了所有 Nuget,但其中一个没有