【问题标题】:An assembly with the same identity 'XXX' has already been imported. Try removing one of the duplicate references已导入具有相同标识“XXX”的程序集。尝试删除重复引用之一
【发布时间】:2018-11-08 15:48:11
【问题描述】:

我有一个 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 (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: 错误 CS1703: An已导入具有相同标识“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 服务器后,错误通常会消失。 我担心如果我们发布它,这也可能发生在实时服务器上。

如果能帮助我指出解决此问题的正确方向,我将不胜感激。

更新:

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

Web.config:

<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" />

Packages.config:

<package id="System.Xml.ReaderWriter" version="4.3.0" targetFramework="net461" />

更新 2:

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

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

还发现 this 可能对其他人将来的故障排除有用。

【问题讨论】:

    标签: c# asp.net .net asp.net-mvc iis


    【解决方案1】:

    作为输出状态,您的项目从两个不同的地方引用 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 中删除 &lt;assemblies&gt; 部分?在我看来,它添加了 4.0.0.0 版本,但您还从 nuget 引用了 4.3.0
    • 我有很多可以在 web.config 和 packages.config 中找到的参考资料。我应该尝试从 web.config 中删除所有这些吗?
    • 我已从 web.config 中删除了“添加程序集”。从那时起它工作正常(可能它没有在任何地方使用)。还添加了一些重定向,但很难判断它是否修复了任何内容,因为一开始没有错误。 (更新了上面的问题,谢谢)
    • 我有一个几乎相同的问题,除了 DLL 是 System.Runtime.DLL。从 web.config 中删除特定的“添加程序集”后,它起作用了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    相关资源
    最近更新 更多