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

时间:2012-02-09 22:28:15

标签: .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)

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

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

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

我还可以考虑解决此问题?我不想更改程序集中的引用以指向旧版本。

21 个答案:

答案 0 :(得分:41)

(除了Jakub的想法)

我遇到了这个错误,因为“Rebuild”并没有真正重建 关闭Visual Studio,真的去删除bin文件夹,然后重建,它可能会更好。

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

答案 1 :(得分:33)

3个想法让你尝试:

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

答案 2 :(得分:30)

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

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

答案 3 :(得分:25)

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

答案 4 :(得分:11)

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

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

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

答案 5 :(得分:2)

转到参考并添加导致问题的dll文件的新引用,并确保所有dll都是针对相同版本编译的。它适用于我,我希望它也适合你。

答案 6 :(得分:1)

我的团队刚刚在构建环境中遇到了这个问题。问题是由于&lt; HintPath&gt;的差异造成的。 .csproj文件的元素。

我们的通用程序集具有指向包含引用程序集的目录的正确相对路径。依赖程序集具有来自以前的目录结构的路径。该解决方案在dev机器上成功编译,因为GAC解决了依赖对C:\ Program Files中安装的正确版本的引用。构建环境有一个传统的程序集安装(即使它应该没有),它会回落到错误状态。更新&lt; HintPath&gt;在文本编辑器中纠正了这个问题。

答案 7 :(得分:1)

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

您可以通过将 nuget软件包更新为通用版本 并使用解决方案中的所有项目来解决此问题

答案 8 :(得分:0)

我手动删除了 bin 和 obj 文件夹,重新构建,并且成功

答案 9 :(得分:0)

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

希望这对您有帮助...

祝你好运

杉山

答案 10 :(得分:0)

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

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

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

答案 11 :(得分:0)

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

答案 12 :(得分: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>

答案 13 :(得分:0)

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

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

答案 14 :(得分:0)

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

答案 15 :(得分: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包管理器。

答案 16 :(得分:0)

我知道在尝试了上述一些步骤之后,很久以前就问过这个问题了。帮助我的是以下步骤和this article

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

我希望这也有帮助。

答案 17 :(得分:0)

有类似的问题。我的问题是我在同一个解决方案中有几个项目,每个项目都引用了DLL的特定版本,但版本不同。解决方案是设置特定版本&#39;在所有引用的所有属性中为false。

答案 18 :(得分:-1)

在我们的团队中,我们使用git在不同的计算机上工作。有人更新了dll而我没有。我刚刚更新了我的依赖项引用并解决了问题。

答案 19 :(得分:-1)

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

然后右键单击引用 - &gt;程序集并搜索system.web.mvc和设置它。

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

编辑:然后选择管理NuGet包并安装更新 (如果您有多个项目也会安装更新。)

重要更新 Microsoft.AspNet.Mvc Microsoft.Net.Compilers 不要忘记!

答案 20 :(得分:-3)

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

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

解决方案 - 在从c.exe中删除B.dll的引用时,我能够解决问题。

希望这有帮助。