2012-04-04 6 views
7

При создании веб-проекта на машине, которая не имеет установки SDK, вы получите предупреждение:Как избавиться от предупреждения MsBuild MSB3644

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

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

Я пробовал проходить/p: NoWarn = 3644 в msbuild (на основе других сообщений, таких как how can i suppress all compiler and code analysis warnings from msbuild at the command line?), но это не имело эффектов.

+0

Эта публикация относится к той же проблеме, хотя это не очевидно из названия: http://stackoverflow.com/questions/17220615/where-can-i-download-the-net-4-5- multitargeting-pack-for-my-build-server –

ответ

3

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

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

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

Перечень возможных входов можно найти here.

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, которые могут пригодиться на эти предупреждения.

+0

Спасибо за ваш ответ. Я просто попробовал, и, к сожалению, он не работает. Я все равно получаю то же предупреждение после добавления /p:TargetFrameworkMoniker=".NETFramework,Version=v4.0 "в командную строку msbuild. :( –

+0

Пробовал ли вы пропустить другие версии? Или, может быть, вам нужны ссылки на «Profile = Client» – KMoraz

+0

«Клиент» сам по себе недействителен («FrameworkName не может иметь менее двух компонентов или более трех компонентов»). заключается в том, что этот флаг сообщает msbuild, какие целевые библиотеки использовать при условии, что их SDK установлен. Без SDK на машине может быть, что он не делает многого. –