已导入具有相同标识“XXX”的程序集。尝试删除重复引用之一

Cri*_*k3t 5 .net c# asp.net iis asp.net-mvc

我有一个 MVC Web 应用程序,我使用 msbuild 命令行将其发布到我们的 UAT 服务器。它托管在 Windows 2016 服务器 IIS 10 上。

有时,并非总是如此,当我尝试启动网站时会出现以下错误:

“/”应用程序中的服务器错误。编译错误说明:在编译服务此请求所需的资源期间发生错误。请查看以下特定错误详细信息并适当修改您的源代码。

编译器错误消息:CS1703:已导入具有相同标识“System.Xml.ReaderWriter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”的程序集。尝试删除重复引用之一。

源错误:[没有相关的源代码行] 源文件:行:0 显示详细的编译器输出:C:\WINDOWS\SysWOW64\inetsrv> "C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" / t:library /utf8output /R: "C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Text.Encoding.Extensions\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Text.Encoding.Extensions.dll" /R :

...

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\4a1a5bcc\84ed54d3\assembly\dl3\ab6a43c3\00602620_2137d201\System.Xml.ReaderWriter.dll" /R:

...

"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml.ReaderWriter\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Xml.ReaderWriter.dll" /R:

...

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\4a1a5bcc\84ed54d3\App_Web_home.cshtml.65a2d1ee.ef3qnjdl.1.cs" Microsoft (R) Visual C# 编译器版本 4.6 1586.0

对于 C# 5 版权所有 (C) Microsoft Corporation。版权所有。

此编译器作为 Microsoft (R) .NET Framework 的一部分提供,但仅支持最高 C# 5 的语言版本,该版本不再是最新版本。有关支持更新版本的 C# 编程语言的编译器,请参阅http://go.microsoft.com/fwlink/?LinkID=533240

c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\4a1a5bcc\84ed54d3\assembly\dl3\ab6a43c3\00602620_2137d201\System.Xml.ReaderWriter.DLL: an error assembly with the the CS1703相同的身份 'System.Xml.ReaderWriter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 已经被导入。尝试删除重复引用之一。c:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Xml.ReaderWriter\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Xml.ReaderWriter.dll:(与先前错误相关的符号位置)

版本信息:Microsoft .NET Framework 版本:4.0.30319;ASP.NET 版本:4.7.3163.0

我试图寻找参考资料,但我只能在 web.config 中看到它一次。

此外,在我运行 iisreset 或重新启动 Web 服务器后,错误通常会消失。我担心如果我们发布它,这也可能发生在实时服务器上。

我将不胜感激任何帮助指出我解决这个问题的正确方向。

更新:

我已经检查了整个项目中的所有参考资料。我能找到的只有。

网页配置:

<compilation defaultLanguage="c#" debug="true" batch="false" targetFramework="4.5" numRecompilesBeforeAppRestart="50">
        <assemblies>
            <remove assembly="System.Xml.ReaderWriter" />
            <add assembly="System.Xml.ReaderWriter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
Run Code Online (Sandbox Code Playgroud)

Packages.config:

<package id="System.Xml.ReaderWriter" version="4.3.0" targetFramework="net461" />
Run Code Online (Sandbox Code Playgroud)

更新 2:

我已经按照 Péter Csajtai 的建议从 web.config 中删除了“添加程序集”。从那以后它工作正常(可能它没有在任何地方使用)。

我试图删除其他程序集,但使用了这些程序集,因此我需要多次重定向。另一方面,它正在工作,所以我有点不愿意“修复它”。我添加了一个重定向来查看它是否可以工作,但是如果没有错误,很难判断它是否在做正确的事情。

还发现对于其他人将来进行故障排除很有用。

小智 5

正如输出所述,您的项目System.Xml.ReaderWriter.dll从两个不同的地方引用:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\4a1a5bcc\84ed54d3\assembly\dl3\ab6a43c3\00602620_2137d201\

来自 GAC:

C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml.ReaderWriter\v4.0_4.0.0.0__b03f5f7f11d50a3a\

您应该检查对该 dll 的所有引用,并在它们不同的地方统一引用路径。

  • 我已经从 web.config 中删除了“添加程序集”。从那以后它工作正常(可能它没有在任何地方使用)。也添加了一些重定向,但很难判断它是否修复了任何问题,因为开始时没有错误。(更新了上面的问题,谢谢) (3认同)