我已经研究了一段时间,但还没有解决。我收到以下错误消息:
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个想法供您尝试:
- 确保所有dll都是针对同一版本的Common编译的
- 请检查解决方案中是否有项目引用,而不是文件引用
- 在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.Tools
的PackageReference
条目包括标记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.1,RuntimeFrameworkVersion标签的值为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文件lib
、source
、libs
等
如果在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.Mvc和Microsoft.Net.Compilers别忘了!
在我们的团队中,我们使用git在不同的计算机上工作。有人更新了一个dll
,但我没有。我只是更新了依赖项引用,问题就解决了。
我遇到了类似的问题,我创建了一个DLL,即a.DLL,它引用了其他DLL,即B.DLL。
我创建了一个应用程序C.exe,并引用了dll A.dll和B.dll。
解决方案-在从c.exe中删除B.dll的引用时,我能够解决这个问题。
希望这能有所帮助。