Предупреждение MSB3243, конфликт между подписанными и неподписанными сборками - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть проект со ссылкой на пакет NuGet на snt.ScintillaNet.FindReplaceDialog.
Этот пакет, в свою очередь, имеет ссылку на неподписанный пакет ScintillaNET.

Мое приложение должно быть подписано, поэтому я сослался на подписанную версию пакета ScintillaNET.
Это работает хорошо, и приложение работает нормально. Однако при сборке я получаю следующее предупреждение:

C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Enterprise \ MSBuild \ Current \ Bin \ Microsoft.Common.CurrentVersion.targets (2106, 5): предупреждение MSB3243: Нет способа разрешить конфликт между «ScintillaNET, версия = 3.6.3.0, Culture = нейтральный, PublicKeyToken = d42c48f11a620156» и «ScintillaNET, версия = 3.6.3.0, Culture = нейтральный, PublicKeyToken = null». Выбор «ScintillaNET, Версия = 3.6.3.0, Культура = нейтральный, PublicKeyToken = d42c48f11a620156» произвольно.

Это имеет смысл, система сборки видит 2 ссылки, одну со знаком и одну без знака.
Этозатем выбирает тот, который я хочу (подписал), и все работает нормально.

Я хочу удалить это предупреждение из сборки.
Я пытался поместить MSB3243 в качестве исключения предупреждения в проекте, нотак как это предупреждение MSBuild, а не предупреждение компилятора, оно не может быть проигнорировано.

Я придумал очень уродливый хак, который я собираюсь опустить как ответ, чтобы помочь кому-то еще, кто сталкивается с той же проблемой(и себя, когда я забыл свое решение).

1 Ответ

0 голосов
/ 01 ноября 2019

Чтобы обойти проблему, я прошу систему сборки игнорировать неподписанную версию.
Для этого я явно добавил неподписанную версию пакета NuGet в проект вместе с подписанной версией.
Затем я вручнуюизменил ссылку в файле .csproj на следующее:

<!-- Hack to prevent the unsigned library to load and raise an assembly conflict --> <PackageReference Include="jacobslusser.ScintillaNET"> <Version>3.6.3</Version> <ExcludeAssets>all</ExcludeAssets> </PackageReference>

Это предотвращает копирование всех артефактов во время разрешения пакета NuGet.

Это ужасно, но работаетпоэтому я хотел бы получить более чистый способ достижения того же эффекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...