错误 CS1705:"which has a higher version than referenced assembly"



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

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:WINDOWSassemblyGAC_MSILCommon3.3.4269.17112__bfde95ba233094b2Common.dll: 
(Location of symbol related to previous error)

web服务器正在运行server 2003。我去了c:\windows\assembly,并注意到列出了Common.dll的三个版本。列出的最高版本是3.3.4269.17112

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

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

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

我有这个错误,因为"重建"并不是真正的重建。

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

此外,有时Visual Studio在引用方面撒谎,因此请检查.csproj文件中的HintPath

如果您正在使用NuGet,那么值得前往"Manage NuGet Packages For Solution",找到导致问题的包并进行更新。然后,它应该将所有包更新到最新版本,并解决问题。

值得一试,因为这是一个快速而简单的。

3个想法供您尝试:

  1. 确保所有dll都是针对同一版本的Common编译的
  2. 请检查解决方案中是否有项目引用,而不是文件引用
  3. 在web.config中使用绑定重定向。(最初链接的版本位于wayback计算机上)

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

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

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

C:Program FilesMicrosoft SDKsWindowsv6.0ABinx64gacutil.exe -u <assembly_name>

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

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

由于某种原因,在.csproj文件上,Microsoft.EntityFrameworkCore.ToolsPackageReference条目包括标记PrivateAssets。这意味着,查看文档:

这些资产将被消耗,但不会流入母项目

在我的情况下,所需的行为是父项目包括依赖项目及其依赖项,因为这减少了相关项目之间NuGet包的重复。

因此,将子项目的.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" />

重建解决了这个问题。

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

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

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

我的团队刚刚在我们的构建环境中遇到了这个问题。该问题是由于<提示路径>.csproj文件的元素。

我们的公共程序集具有到包含引用程序集的目录的正确相对路径。依赖程序集具有来自以前目录结构的路径。GAC解析依赖项对C:\Program Files中安装的正确版本的引用时,解决方案在开发计算机上成功编译。生成环境有一个程序集的遗留安装(尽管它本应该没有),但它又回到了这个安装,从而导致了错误。正在更新<提示路径>在文本编辑器中更正了问题。

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

在我的场景中,我为我的dotnetCore应用程序编辑了.csproj文件。我注意到TargetFramework标记的值为netcoreapp2.1RuntimeFrameworkVersion标签的值为2.0.0。因此,我将RuntimeFrameworkVersion更改为2.1.0

希望这能帮助你。。。

祝你好运,

Sugeshan

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

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

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

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

我希望这也有帮助。

从以下位置下载最新的.NET SDK:https://dotnet.microsoft.com/en-us/download/visual-studio-sdks?cid=getdotnetsdk

手工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>......libDocumentFormat.OpenXml.dll</HintPath>
</Reference>

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

快速变通

  • 检查并还原dll的收集文件夹
  • 从解决方案资源管理器执行卸载项目,然后重新加载项目

right Workaround是迁移到NuGet包管理器。

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

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

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

更改中的以下内容<Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <HintPath>..packagesMicrosoft.AspNet.Mvc.3.0.50813.1libnet40System.Web.Mvc.dll</HintPath> </Reference>

我是在将Episerver Find添加到我们的网站并安装相应的NuGet软件包用于Episerver Find后得到的。

修复很简单:也更新所有与Episerver相关的附加组件(即使它们看起来不相关:CMS、CMS.TinyMCE、CMS.UI等)

在更新了所有可能的Episerver加载项并重新编译后,错误消失了。

对于我来说,项目中使用的一个自定义nuget包使用的是Newtonsoft.Json的更高版本,而项目使用的是Newton soft.Json的更低版本。更新项目Newtonsoft.JsonnugetPackage>=Newtonsoft.Json使用的自定义包中使用的nugetPackage。

在我的情况下,这是因为我认为其中一个项目已经更新了所有Nuget,但其中一个不是

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

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

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

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

重要的更新是Microsoft.AspNet.MvcMicrosoft.Net.Compilers别忘了!

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

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

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

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

希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新