错误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服务器正在运行Server 2003.我去了c:\ windows \ assembly,事实上注意到有3个版本的Common.dll列出。 列出的最高版本是3.3.4269.17112

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

我可以使用Windows资源pipe理器,并validation更高版本的Common.dll现在也列出。

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

3个想法让你尝试:

  1. 确保所有的dll都是针对相同版本的Common编译的。
  2. 检查您的解决scheme中是否有项目引用,而不是文件引用。
  3. 在web.config中使用绑定redirect

(除Jakub的想法外)

我有这个错误,因为“重build”不是真的重build。
closuresVisual Studio,真的去删除bin文件夹,然后重build,它可能会更好。

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

我的问题是,我有2个项目引用2不同版本的相同的DLL的不同副本。 我解决了这两个问题,并确保他们引用相同的dll文件。

如果您使用的是NuGet,则需要“pipe理NuGet软件包解决scheme” ,find导致问题的软件包并触发更新。 然后它应该把所有的软件包都升级到最新版本并解决问题。

值得一试,因为这是一个快速和容易。

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

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

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

转到引用,并添加一个新的引用你的dll文件,这是造成问题,并确保所有的DLL编译相同的版本。 它适用于我,我希望它也适用于你。

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

我们常见的组件有一个正确的相对path到包含我们的引用程序集的目录。 从属程序集有一个从以前的目录结构的path。 解决scheme在开发机器上成功编译为GAC,解决了依赖者对C:\ Program Files中安装的正确版本的引用。 构build环境有一个程序集的遗留安装(即使它应该没有),它回落到,因此错误。 在文本编辑器中更新<HintPath>可以解决问题。

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

我知道这是一段时间之前,尝试了一些上述步骤后问。 帮助我的是以下步骤和这篇文章 。

我find了引用,并将PublicKeyToken从被引用的PublicKeyToken更改为旧引用。

我希望这也有帮助。

在你的项目中findreferances System.Web.Mvc检查版本。

之后,右键单击参考– >程序集并searchsystem.web.mvc并进行设置

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

编辑:selectpipe理nuget包并安装更新(如果您有多个项目也安装更新)。

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

手工制作的dll的collections夹
如果您的解决scheme有来自不同库的dll文件的垃圾文件夹
libsourcelibs
如果您在Visual Studio中打开解决scheme(第一次),则可能会遇到此问题。 而你的DLL的收集文件夹是错过了某种方式或具体的dll文件丢失。

Visual Studio会默默地尝试用dll自己的参考替代。 如果VS会成功,那么一个新的引用将持续为您的本地解决scheme。 不适用于其他克隆/结帐。

即您的<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文件夹中引用。

快速解决方法

  • 检查并恢复你的收集文件夹
  • 从解决scheme资源pipe理器中卸载项目 ,然后重新加载项目

正确的解决方法是迁移到NuGet包pipe理器。

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

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

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

解决scheme – 从c.exe中删除B.dll的引用,我能够解决这个问题。

希望这可以帮助。