Как избавиться от предупреждения msbuild MSB3644

При создании веб-проекта на компьютере, на котором не установлен SDK, вы получаете следующее предупреждение:

предупреждение MSB3644: эталонные сборки для платформы «.NETFramework, версия = v4.0» не найдены. Чтобы решить эту проблему, установите SDK или пакет Targeting Pack для этой версии платформы или перенастройте приложение на версию платформы, для которой у вас установлен SDK или пакет Targeting Pack. Обратите внимание, что сборки будут разрешены из глобального кэша сборок (GAC) и будут использоваться вместо эталонных сборок. Поэтому ваша сборка может быть неправильно ориентирована на предполагаемую вами структуру.

Очевидно, что один из способов избавиться от предупреждения — установить SDK. Однако в этом случае я просто хочу подавить это предупреждение (что в основном безвредно) из вывода сборки, не изменяя состояние машины каким-либо другим образом.

Я попытался передать /p:NoWarn=3644 в msbuild (на основе других сообщений, таких как как я могу подавить все предупреждения компилятора и анализа кода от msbuild в командной строке?), но это не имело никакого эффекта.


person David Ebbo    schedule 04.04.2012    source источник
comment
Этот пост SO решает ту же проблему, хотя это и не очевидно из названия: stackoverflow.com/questions/17220615/   -  person John Hart    schedule 19.08.2015


Ответы (1)


NoWarn применяется к предупреждениям компиляции, выдаваемым задачами Csc и Vbc.

Предупреждения MSB* являются основными предупреждениями MSBuild. Чтобы подавить предупреждение MSB3644, передайте явный TargetFrameworkMoniker:

msbuild your.csproj /t:Rebuild /p:TargetFrameworkMoniker=".NETFramework,Version=v4.0"

Список возможных входных данных можно найти здесь.

v1.1.4322
v2.0.50727
Client
v4.0
v4.0.30319
.NET Framework, Version=v4.0, Profile=Client
.NET Framework, Version=v4.0
.NET Framework, Version=v4.0.1, Profile=Client
.NET Framework, Version=v4.0.1
.NET Framework, Version=v4.0.2, Profile=Client
.NET Framework, Version=v4.0.2
.NET Framework, Version=v4.0.3, Profile=Client
.NET Framework, Version=v4.0.3
.NET Framework, Version=v4.5

В MSBuild 4.5 появился новый флаг — IgnoreVersionForFrameworkReferences, который может пригодиться для этих предупреждений.

person KMoraz    schedule 04.04.2012
comment
Спасибо за Ваш ответ. Я только что попробовал это, и, к сожалению, это не работает. Я по-прежнему получаю точно такое же предупреждение после добавления /p:TargetFrameworkMoniker=.NETFramework,Version=v4.0 в командную строку msbuild. :( - person David Ebbo; 04.04.2012
comment
Пробовали проходить другие версии? или, может быть, вам нужны ссылки на Profile=Client - person KMoraz; 04.04.2012
comment
«Клиент» сам по себе кажется недопустимым (FrameworkName не может содержать менее двух или более трех компонентов). Я предполагаю, что этот флаг сообщает msbuild, какие целевые библиотеки использовать при условии, что их SDK установлен. Без SDK на машине может случиться так, что он мало что делает. - person David Ebbo; 05.04.2012
comment
Хм, только что нашел эту страницу, и, видимо, это невозможно: social.msdn.microsoft.com/Forums/en-US/tfsbuild/thread/. В нем говорится, что предупреждения с префиксом MSB выдаются MSBuild. В настоящее время мы не можем подавить предупреждения MSBuild. - person David Ebbo; 05.04.2012
comment
эта ветка не о MSBuild 4.0. Выше я имел в виду .NET Framework, Version=v4.0, Profile=Client не сам клиент. Для этого свойства подавлено точное предупреждение. - person KMoraz; 05.04.2012
comment
Это тоже не работает. Вы действительно видели случай, когда добавление этого флага приводило к исчезновению этого конкретного предупреждения? - person David Ebbo; 05.04.2012