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. Но я не могу найти ничего, связанного с моим сценарием.
Я пытался:
- Обновите app.config/web.config
- Скопируйте библиотеки BCL в папку ссылок.Net 4.0
- Прочитайте это ( https://blogs.msdn.microsoft.com/bclteam/p/asynctargetingpackkb/), но не можете найти способ решить мою проблему
(нет кода для этого вопроса)
Мое ожидание:
- Я могу использовать 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.