我有一个MVC Web应用程序,可以使用msbuild命令行发布到我们的UAT服务器。它托管在Windows 2016服务器IIS 10上。
有时候,并非总是,当我尝试启动网站时出现以下错误:
“ /”应用程序中的服务器错误。 编译错误 说明:编译服务于此请求所需的资源期间发生错误。请查看以下特定的错误详细信息,并适当地修改您的源代码。
编译器错误消息:CS1703:具有相同标识'System.Xml.ReaderWriter,版本= 4.1.0.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a'的程序集已经导入。尝试删除重复的引用之一。
源错误: [没有相关的源代码行] 源文件:行:0 显示详细的编译器输出: C:\ WINDOWS \ SysWOW64 \ inetsrv> “ C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ csc.exe” / t:库/ 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 \临时ASP.NET文件\ root \ 4a1a5bcc \ 84ed54d3 \ assembly \ dl3 \ ab6a43c3 \ 00602620_2137d201 \ System.Xml.ReaderWriter.DLL:错误CS1703:An具有相同标识'System.Xml.ReaderWriter,版本= 4.1.0.0,区域性=中性,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éterCsajtai的建议从web.config中删除了“添加程序集”。 从那时起,它运行良好(可能没有在任何地方使用)。
我尝试删除其他程序集,但是使用了这些程序集,因此我需要多个redirects。另一方面,它正在工作,所以我不太愿意“修复它”。我添加了重定向以查看它是否可以正常运行,但是没有错误,很难判断它是否在做正确的事情。
还发现this可能对其他人将来的故障排除很有用。
答案 0 :(得分:1)
作为输出状态,您的项目从两个不同的地方引用System.Xml.ReaderWriter.dll
:
C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \临时ASP.NET文件\ 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的引用,并统一不同的引用路径。