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


108

我已经研究了好一阵子,但还没有解决。我收到以下错误消息:

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 \ assembly,实际上确实注意到列出了Common.dll的3个版本。列出的最高版本是3.3.4269.17112

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

我可以使用Windows资源管理器并确认现在也列出了更高版本的Common.dll。

我还能进一步解决该问题吗?我不想在程序集中更改引用以指向旧版本。


2
疯狂的*.*版本号。重建所有内容,只有这样才能确保。
汉斯·帕桑

Answers:



68

我遇到此错误是因为“重建”并没有真正重建。

解决方案:关闭Visual Studio,真正去删除bin文件夹,然后重新构建,可能效果更好。

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


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

40

如果您使用的是NuGet,则值得去“管理解决方案的NuGet程序包”,查找引起问题的程序包并点击更新。然后应该将所有软件包升级到最新版本并解决问题。

值得一试,因为它既快速又容易。


2
这为我解决了,谢谢。但是我的情况略有不同:更新中没有列出它,因此我必须去安装,并且有一个窗口显示每个项目的软件包版本。我正在将一些旧模块升级到cms的新版本,因此我必须转到有问题的软件包,选择它们并单击安装。可能是因为cms刚刚更改为使用nuget,但您为我省去了很多繁琐的csproj编辑工作!
rtpHarry

3
确保在解决方案级别而不是项目级别更新NuGet软件包。
Jess

2
当然,这绝对应该是被接受的答案,我没有读过这篇文章,但是无意中尝试了我的解决方案,它就像一种魅力。
baymax

30

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


13

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

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

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

两年后,您的建议如履薄冰。在对象浏览器中查看引用会对其进行排序。
ceebreenk 2014年

3

转到参考并添加引起问题的dll文件的新参考,并确保所有dll均针对同一版本进行编译。它对我有用,我希望对您也有用。


2

我的团队只是在我们的构建环境中遇到了这个问题。该问题是由于.csproj文件的<HintPath>元素不同所致。

我们的通用程序集具有指向包含我们的参考程序集的目录的正确相对路径。从属程序集具有以前目录结构的路径。当GAC解决依赖项对C:\ Program Files中安装的正确版本的引用时,该解决方案已在开发人员计算机上成功编译。生成环境具有旧版的程序集安装(即使应该没有),因此回退到该错误。在文本编辑器中更新<HintPath>可以解决此问题。



1

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


1

我知道在尝试了上述一些步骤之后不久就问了这个问题。帮助我的是以下步骤和本文

我找到了引用,并将PublicKeyToken从被引用的那个更改为较旧的那个。

我希望这也会有所帮助。


1

我有同样的错误。安装Microsoft.AspNetCore.ALL到测试项目后,我修复了该错误。


0

手工制作的dll的文件夹集合
如果您的解决方案有不同库中的dll文件夹的垃圾
libsourcelibs
你可以在Visual Studio这个麻烦,如果你打开你的解决方案(一冷杉时间)。而且您的dll的收集文件夹由于某种原因而丢失,或者缺少了具体的dll文件。

Visual Studio将静静地尝试自行替换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程序包管理器。


0

对于SharePoint,请确保在您的根文件夹下没有DLL的“ bin”文件夹,如果是这样,请将其删除。(在VS中将“复制本地”更改为false)。


0

网站项目中的引用存储在其web.config文件中。在此处更新参考以修复错误。

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


0

我在UnitTestingProject中遇到了同样的问题,在MainProject中我使用的是“ System.Web.Mvc,版本= 3.0.0.0”,在UnitTestingProject中我使用的是“ System.Web.Mvc,版本= 3.0.0.1”

在以下更改 <Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.AspNet.Mvc.3.0.50813.1\lib\net40\System.Web.Mvc.dll</HintPath> </Reference>


0

在将Episerver Find添加到我们的站点并为Episerver Find安装了相应的NuGet软件包之后,我得到了这一信息。

修复很容易:还要更新所有与Episerver相关的加载项(即使它们似乎无关):CMS,CMS.TinyMCE,CMS.UI等)

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


0

在我的方案中,我为dotnetCore应用程序编辑了.csproj文件。我注意到TargetFramework标记的值为netcoreapp2.1,而RuntimeFrameworkVersion标记的值为2.0.0。因此,我将RuntimeFrameworkVersion更改为2.1.0,进行了保存,重新启动VS并进行了重建,然后它解决了错误。

希望这个能对您有所帮助 ...

祝好运,

苏格山


-1

在您的项目中找到引用System.Web.Mvc检查版本。

之后,右键单击引用->程序集并搜索system.web.mvc并进行设置

该问题导致这些程序集的版本不同。

编辑:比选择管理NuGet包并安装更新(如果您有多个项目,请同时安装更新。)

重要更新是Microsoft.AspNet.MvcMicrosoft.Net.Compilers不会忘记它!



-3

我有一个类似的问题,我创建了一个DLL,即A.dll,它引用了其他DLL,即B.dll。

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

解决方案-从c.exe删除B.dll的引用后,我得以解决此问题。

希望这可以帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.