MSBuild не удалось создать веб-сайт со ссылкой на библиотеку, связанную с Bcl

У меня есть 2 проекта (.Net 4.0)

  • Библиотека классов (DataProvider)
    • Добавить ссылку на библиотеку Bcl.Async (через nuget)
    • Предоставить некоторые асинхронные методы
  • Веб-сайт (SampleSite)
    • Ссылка на "DataProvider"

Проблема:

  • Когда я строю с Visual Studio, все в порядке (я использую VS 2017 Community)
  • При попытке с MSBuild (MSBuild /target:rebuild /p:Configuration=Release /m:4) я получаю это предупреждение "..\WebSite1_1_.metaproj" (Перестроить цель) (2) -> ..\WebSite1_1_.metaproj: предупреждение MSB3268: не удалось разрешить первичную ссылку "...\WebSite1\DataProvider\bin\Debug\DataProvider.dll", поскольку она имеет косвенную зависимость от сборки каркаса "System.Runtime, Version=1.5.11.0, Culture= нейтральный, PublicKeyToken=b03f5f7f11d50a3a", который не может быть разрешен в текущей целевой структуре. ".NETFramework,Version=v4.0". Чтобы решить эту проблему, удалите ссылку "...\WebSite1\DataProvider\bin\Debug\DataProvider.dll" или перенастройте свое приложение в версию платформы, которая содержит "System.Runtime, Version=1.5.11.0, Culture= нейтральный"., PublicKeyToken=b03f5f7f11d50a3a"."
  • Последняя dll DataProvider не будет скопирована в папку Bin "SampleSite", если я использую что-то новое из DataProvider, я получу ошибку (ошибка сборки)

Я искал вокруг, в том числе StackOverFlow. Но я не могу найти ничего, связанного с моим сценарием.

Я пытался:

(нет кода для этого вопроса)

Мое ожидание:

  • Я могу использовать MSBuild или что-то другое автоматически для решения этой проблемы (поскольку эта проблема возникает на моем сервере сборки автоматически)

Обновить изображения

  • Решение
  • Просто добавил новое свойство в DataProvider:
  • Используйте его как обычно на сайте:
  • Выход MSBuild:
  • Проект DataProvider:

Если я щелкну правой кнопкой мыши на "WebSite2" -> "Создать веб-сайт", все будет хорошо. Но я хочу использовать msbuild для автоматизации работы

1 ответ

Теперь я могу воспроизвести ту же проблему на своей машине (подробности см. В № 4594), поскольку она имеет некоторое отличие от № 5993, я сообщаю об этом вmsbuild вместо того dotnet cli. О проблеме сообщено в Msbuild 4594.

А обходной путь, который может работать в командной строке, - использовать команды devenv.

Но для этого нам нужно установить VS на машине сборки, тогда мы можем использоватьdevenv command нравиться:

Использовать -Rebuildпереключатель может работать так же, как и в VS. См. Замечание 1.

На мой взгляд, если мы создадим это конкретное решение в vs, оно может выполнить больше действий, чем один msbuild.exe. Вот почему он хорошо работает в командной строке vs, но не в msbuild.

Поэтому, если нам нужно автоматически создать этот конкретный веб-сайт на сервере сборки, мы можем попробовать использовать команду devenv.(Чтобы увидеть результат сборки, похоже, что используетсяdevenv.com лучше, чем использовать devenv.exeсм. это)

Надеюсь, это поможет, и давайте отследим проблему в 4594.

Другие вопросы по тегам