У меня есть веб-приложение MVC, которое я публикую на нашем UAT-сервере с помощью командной строки msbuild. Он размещен на сервере Windows 2016, IIS 10.
Иногда не всегда , при попытке запустить веб-сайт возникает следующая ошибка:
Ошибка сервера в «/» приложении.
Ошибка компиляции
Описание: во время компиляции ресурса, необходимого для обслуживания этого запроса, произошла ошибка. Пожалуйста, просмотрите следующие конкретные подробности ошибки и измените свой исходный код соответствующим образом.
Сообщение об ошибке компилятора: CS1703: сборка с таким же идентификатором 'System.Xml.ReaderWriter, версия = 4.1.0.0, Culture = нейтральная, 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 \ Временные файлы ASP.NET \ 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 \ Временные файлы ASP.NET \ 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: ошибка сборка с таким же именем 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 или перезапуска веб-сервера.
Боюсь, это может произойти и на живом сервере, если мы выпустим его.
Буду признателен за любую помощь, чтобы указать мне правильное направление, чтобы это исправить.
UPDATE:
Я проверил все ссылки во всем проекте. Все, что я могу найти, это.
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:
Я удалил «добавить сборку» из web.config, как это было предложено Петером Чайтай.
С тех пор он работает нормально (вероятно, он нигде не используется).
Я пытался удалить другие сборки, но они используются, поэтому мне потребуется несколько перенаправлений . С другой стороны, это работает, поэтому я не очень-то хочу «исправить это». Я добавил перенаправление, чтобы посмотреть, сработает ли оно, но без ошибки трудно сказать, правильно ли он работает.
Также найдено это , которое может пригодиться другим для устранения неполадок в будущем.