Могу ли я использовать msbuild 4.0 для таргетинга на dotnet 3.5?

В моем решении у меня есть ссылки на проекты (например) System.ServiceModel.dll, где для параметра "использовать определенную версию" установлено значение false. Все отлично работает с msbuild 3.5.

Я хотел бы использовать msbuild 4.0, чтобы использовать функции свойств. Я попытался передать свойства «TargetFrameworkVersion = 3.5; ToolsVersion = 3.5». Однако я получаю следующую ошибку:

Не удалось загрузить файл или сборку C: \ WINDOWS \ Microsoft.Net \ assembly \ GAC_MSIL \ System.configuration \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ System.configuration.dll или одну из ее зависимостей.

Этого не произойдет, если я использую msbuild 3.5.

Могу ли я сделать это без указания версий в файлах проекта? (В будущем мы, возможно, захотим обновить приложение до dotnet 4)

Изменить: я попытался использовать msbuild 3.5 во «внешнем» вызове и вызвать msbuild (используя an<msbuild>task) 4.0 для тех целей, для которых требуются новые функции. С этим тоже не повезло - внутренний вызов выдает следующее сообщение об ошибке:

ошибка MSB4062: не удалось загрузить файл или сборку Microsoft.Build.Tasks.v4.0, Version = 4.0.0.0 или одну из его зависимостей. Система не может найти указанный файл. Убедитесь, что объявление правильное, и что сборка и все ее зависимости доступны.


person Rob    schedule 27.02.2012    source источник
comment
Ответ на вопрос заголовка - Да. Я подозреваю, что ответ на ваш второй вопрос (нацеливание на ссылки на сборку без изменений проекта) может быть нет. Вы нацеливали конкретный проект на .NET 3.5? Я имею в виду не его зависимости, а целевой фреймворк для самого проекта. В будущем их можно будет намного легче изменить.   -  person CJBrew    schedule 27.02.2012
comment
Решение - VS2008. Все проекты нацелены либо на 3.5, либо на 2.0.   -  person Rob    schedule 27.02.2012
comment
Вы уверены, что действительно вызываете исполняемый файл MSBuild.exe версии 4.0? Он установлен в `% windir% \ Microsoft.NET \ Framework \ v4.0.30319` (для 32-битной версии). Или убедитесь, что вы используете командную строку VS2010 (а не командную строку VS2008).   -  person Christian.K    schedule 28.02.2012


Ответы (2)


Параметр, передаваемый в msbuild:

/p:TargetFrameworkVersion="v3.5"

Это доступно в MSBuild версии 3.5 и выше (3.5, 4.0, 2012, 2013 и т. Д.). Он изменяет свойство в скрипте msbuild для этой сборки.

Дополнительное примечание: вы даже можете указать все целевые версии, установленные на машине, для каждой из версий MSBuild. Обычно вы не можете сделать это в Visual Studio (например, использовать 4.5.1 в 2010 году), однако MSBuild 4.0 (vs2010) примет его как значение свойства и будет использовать.

person Jason    schedule 20.03.2014

Пытаться:

/p:TargetFramework=v3.5

Целевая версия платформы может быть v2.0, v3.0 или v3.5. Если вы являетесь эталонными сборками, которых нет в данной целевой версии платформы, вы получите ошибки / предупреждения во время сборки.

Использованная литература:

person Jeff Crist    schedule 29.05.2012