У меня есть приложение службы Windows, созданное с использованием VB. NET под Visual Studio 2013 и использующее NET Framework 4.5. Я использую Nuget в этом проекте.
Как только я создаю решение (оно успешно собирается), в окне результатов появляется следующее предупреждение:
No way to resolve conflict between "Microsoft.ReportViewer.ProcessingObjectModel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" and "Microsoft.ReportViewer.ProcessingObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". Choosing "Microsoft.ReportViewer.ProcessingObjectModel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" arbitrarily.
No way to resolve conflict between "Microsoft.ReportViewer.DataVisualization, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" and "Microsoft.ReportViewer.DataVisualization, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". Choosing "Microsoft.ReportViewer.DataVisualization, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" arbitrarily.
No way to resolve conflict between "Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" and "Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". Choosing "Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" arbitrarily.
No way to resolve conflict between "Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" and "Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed". Choosing "Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" arbitrarily.
No way to resolve conflict between "Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" and "Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed". Choosing "Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" arbitrarily.
Consider app.config remapping of assembly "Newtonsoft.Json, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" from version "9.0.0.0" [] to version "11.0.0.0" [C:\MyProjects\WindowsServices\MyService\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll] to solve conflict and get rid of warning.
C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1697,5): warning MSB3276: Microsoft.Common.CurrentVersion.targets Found conflicts between different versions of the same dependent assembly.
Please set the "AutoGenerateBindingRedirects" property to true in the project file. For further information, see http://go.microsoft.com/fwlink/?LinkId=294190.
Я искал информацию о это, и я нашел несколько сообщений и блогов, говорящих об этом:
Я пытался очистить все ссылки в проекте VB. NET, которые не использовались, но над ними продолжают появляться предупреждающие сообщения.
Также Я вошел в Управление пакетами NuGet, но я не видел дубликатов пакетов в списке.
Я нигде не вижу дубликатов (файл проекта vbproj, app.config, et c.). Где я могу найти эти дубликаты? Где дубликаты? Как искать дубликаты?
Наконец, я знаю, что есть еще один способ разрешения этих конфликтов (я еще не пробовал), и он заключается в добавлении перенаправлений привязки для всех сборок, конфликтующих в приложении. Конфигурационный файл Например, в случае с Closed XML DLL:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="ClosedXML" publicKeyToken="fd1eb21b62ae805b" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-0.85.0.0" newVersion="0.85.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Вместо добавления вручную конфликтующих сборок в файл app.config, я знаю, что это может быть сделано автоматически в Visual Studio путем добавления записи свойства ниже в файле проекта vbproj:
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
как объяснено здесь .
В любом случае, я хотел бы разрешить эти конфликты без привязки перенаправлений для всех конфликтующих сборок в файл app.config. Так возможно ли это? Если да, то как?
Также у меня есть некоторые другие вопросы:
- Привязка перенаправлений для конфликтующих сборок в файле app.config - хорошая практика?
- Почему эти конфликты между собраниями происходят? Я вообще ничего не понимаю, поэтому, пожалуйста, не могли бы вы объяснить мне это?
- Что произойдет, если я не разрешу эти конфликты и проигнорирую их (поскольку решение строится успешно без ошибок)? Обязательно или настоятельно рекомендуется разрешить их по какой-либо причине, которую я в настоящее время не знаю?