Я настраиваю свое первое фоновое приложение Windows IoT Core, работающее на Raspberry Pi, но у меня возникла проблема с конфликтующими версиями сборки, и я не смог их разрешить.
В частности, я получаю сообщение об ошибке, которое гласит:
No way to resolve conflict between "System.Data.Common, Version=4.2.1.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" and "System.Data.Common,
Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". Choosing
"System.Data.Common, Version=4.2.1.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" arbitrarily.
При ближайшем рассмотрении существует две версии System.Data.Common.dll
, на которые ссылается мое приложение.
Первый идет из установленного пакета Microsoft.NETCore.UniversalWindowsPlatform (v 6.2.8)
. Версия System.Data.Common для сборки здесь 4.2.1.0 (это версия, которую я хочу использовать):
Assembly System.Data.Common version 4.2.1.0
C:\Users\mikel\.nuget\packages\Microsoft.NETCore.UniversalWindowsPlatform\6.2.8\ref\uap10.0.15138\System.Data.Common.dll
Второе, по-видимому, включено как зависимость с .netstandard:
Assembly System.Data.Common version 4.1.0.0
C:\Users\mikel\.nuget\packages\System.Data.Common\4.3.0\ref\netstandard1.2\System.Data.Common.dll
Мне немного сложнее определить, что именно заставляет NuGet загрузить и установить второй пакет. Возможно, один из моих других пакетов, который мне нужен, ссылается на него как на зависимость (не уверен).
В любом случае, я бы хотел настроить переназначение привязки сборки, чтобы любая попытка обратиться к 4.1.0.0 перенаправляла и использовала 4.2.1.0.
Когда я делаю сборку своего проекта, я получаю это предупреждение:
1> Consider app.config remapping of assembly "System.Data.Common, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" from Version "4.1.0.0"
[C:\Users\mikel\.nuget\packages\System.Data.Common\4.3.0\ref\netstandard1.2\System.Data.Common.dll]
to Version "4.2.1.0"
[C:\Users\mikel\.nuget\packages\Microsoft.NETCore.UniversalWindowsPlatform\6.2.8\ref\uap10.0.15138\System.Data.Common.dll]
to solve conflict and get rid of warning.
Однако из того, что я прочитал, универсальные проекты Windows не поддерживают использование файлов app.config. В любом случае, я добавил файл app.config в корень моего проекта, установил действие сборки на Embedded Resource
, выбрал Copy Always
и поместил его в файл (без изменений):
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Data.Common" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="4.1.0.0" newVersion="4.2.1.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Я также попытался установить формат управления проектом NuGet на PackageReference
и добавил <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
к каждой PropertyGroup в моем файле .csproj. Это не оказало никакого влияния.
Мои цели проекта Universal Windows следующие:
Целевая версия: Windows 10 Fall Creators Update (10.0; Build 16299)
Минимальная версия: Windows 10 Fall Creators Update (10.0; Build 16299)
Я также должен заявить, что я хочу использовать версию сборки 4.2.1.0, поскольку в 4.1.0.0 отсутствует несколько вещей, которые мне нужны для реализации оболочки, которую я использую вокруг SQLite. Я предпочитаю не переписывать эти обертки.
В этот момент я очень озадачен тем, как разрешить этот конфликт. Как включить перенаправление привязки для устранения этой ошибки?
Любая помощь будет принята с благодарностью.