Msbuild не может создать проект веб-сайта с косвенной ссылкой на System.Runtime

У меня проблема с зависимостью от MSBuild. Я добавил пакет NuGet для Microsoft.Tpl.Dataflow в проект своего решения. Это вызывает сбой сборки проекта веб-сайта в решении, которое ссылается на первый проект. Похоже, возникла проблема с получением правильной версии среды выполнения.

Это одна из многих ошибок, которые я получаю при создании решения с помощью MSBuild.

C: \ src \ MyWebsite.metaproj: предупреждение MSB3268: основная ссылка «C: \ src \ projects \ ReferencedProject \ bin \ Debug \ ReferencedProject.dll» не может быть разрешена, поскольку она имеет косвенную зависимость от системы сборки платформы. Среда выполнения, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a ", которая не может быть разрешена в текущей целевой структуре. «.NETFramework, версия = v4.5». Чтобы решить эту проблему, либо удалите ссылку «C: \ src \ projects \ ReferencedProject \ bin \ Debug \ ReferencedProject.dll», либо перенацелите свое приложение на версию платформы, которая содержит «System.Runtime, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a ".

Что сбивает с толку, так это то, что решение отлично работает в Visual Studio. Кроме того, все другие проекты в сборке решения - это только проекты веб-сайтов, которые терпят неудачу.

я пытался

  • Изменение целевой структуры веб-сайта на 4.0 (сейчас это 4.5).
  • Добавление ссылки на сборку в System.Runtime.dll версии 4.0.0.0

Я все еще не могу его построить. Как я могу это исправить?


person Kris Harper    schedule 14.11.2015    source источник


Ответы (1)


Оказывается, aspnet_compiler.exe (который вызывается msbuild) не ищет библиотеки в каталоге Facade по адресу

C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5 \ Facade

и поэтому проект веб-сайта в решении не будет компилироваться.

Я узнал об этом из этого сообщения в блоге. Как уже упоминалось, для решения проблемы я скопировал библиотеки DLL из каталога Facade в каталог v4.5, и все работает.

Если честно, это далеко не идеальное решение.

person Kris Harper    schedule 16.11.2015
comment
Спасибо, что поделились этим. - person frattaro; 17.03.2017
comment
То же самое случилось и с нами в .net 4.7. Я хотел бы добавить, что это произошло с нами только при использовании командной строки msbuild на сервере сборки, а не в Visual Studio. Хотя это решение также работает, поскольку в 4.7 также есть каталог Facades, должен быть лучший способ, чем копирование системных файлов, которое должно было бы выполняться на каждом сервере сборки. - person madamission; 22.10.2017
comment
Если кто-то хочет вникнуть в это больше, чтобы попытаться сделать это правильно, или проверить, чтобы сообщить об этом в Microsoft, я «думаю», что существует базовый параметр msbuild, называемый TargetFrameworkDirectories, для которого отсутствует этот путь. Что касается того, как получить его с помощью aspnet_compiler, я не уверен, потому что не знаю, можете ли вы передать ему параметры. А пока я собираюсь использовать не идеальное решение для копирования файлов. - person madamission; 22.10.2017