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

问题描述 投票:89回答:17

我已经对此进行了一段时间的研究,但尚未解决。我收到以下错误消息:

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。

我还有什么可以解决这个问题的?我不想更改程序集中的引用以指向旧版本。

.net web-deployment
17个回答
35
投票

3个想法供您尝试:

  1. 请确保所有dll是针对相同版本的Common编译的。
  2. 检查解决方案中是否有项目引用而不是文件引用。
  3. 在您的web.config中使用binding redirections。 (Originally linked version at wayback machine

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>


-1
投票
在您的项目中找到引用

System.Web.Mvc


-1
投票

-3
投票

49
投票

我有此错误,因为“ Rebuild”并不是真正的重建。

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

而且,有时Visual Studio会涉及引用,因此请检查HintPath文件中的.csproj


33
投票

如果您使用的是NuGet,则值得去[['管理NuGet解决方案的软件包',找到引起问题的软件包并进行更新。然后,应将所有软件包升级到最新版本并解决问题。

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

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

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

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

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


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

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

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


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

1
投票
我知道在尝试了上述一些步骤后不久才问过这个问题。以下步骤和this article帮助了我。

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

我希望这也会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.