Измените проект C ++ / CLI на другой фреймворк, чем 4.0 с vs2010

153

Так как я обновил свой проект до формата проекта Visual Studio 2010, мой проект C ++ / CLI нацелен на .net Framework 4.0.

Легко переключить версию фреймворка на другую версию из проекта C #, но я понятия не имею, как это сделать в проекте C ++ / CLI, я не вижу настройки для этого на страницах свойств проекта.

codymanix
источник

Ответы:

190

Это появляется, когда вы нажимаете F1 в диалоговом окне Framework and References:

По умолчанию для новых проектов целевая платформа установлена ​​на .NET Framework 4. Среда IDE не поддерживает изменение целевой платформы, но вы можете изменить ее вручную. В файле проекта (.vcxproj) целевая среда по умолчанию представлена ​​элементом свойства v4.0. Чтобы изменить целевую платформу, выгрузите проект, откройте файл проекта с помощью текстового редактора, а затем измените значение элемента свойства с версии 4.0 на другую версию, установленную на вашем сервере. Например, если вы указываете v3.5, который представляет собой .NET Framework v3.5, необходимо установить Visual Studio 2008 SP1 . Сохраните и закройте файл, перезагрузите проект и убедитесь, что целевая платформа отображается на странице свойств. *

Это не очень точно для конвертированных проектов, вам придется добавить <TargetFrameworkVersion>элемент самостоятельно. Поместите его в PropertyGroup с пометкой «Глобальные»:

  <PropertyGroup Label="Globals">
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <others...>
  </PropertyGroup>

Ситуация меняется, когда вы используете VS2012 и выше, первую версию VS, которая приобрела параметр Platform Toolset на странице свойств General. Затем вы должны выбрать «v90», чтобы получить правильную сборку, нацеленную на 3.5. Однако это неуклюже, чтобы иметь этот выбор, на компьютере должны быть установлены все промежуточные версии VS.

Почему вам нужен VS2008, требует объяснения. Основная проблема заключается в том, что библиотека времени выполнения C (msvcrt100.dll и выше) содержит код .NET для поддержки выполнения управляемого кода. Важной деталью является инициализатор модуля, который обеспечивает правильную инициализацию CRT в программе, использующей код C ++ / CLI. Этот код всегда нацелен на .NET 4, и, поскольку он запутан в msvcrt100.dll (и выше), у вас всегда есть жесткая зависимость от времени выполнения v4.0.30319. Вы можете иметь только чистую зависимость v2.0.50727 при использовании старой среды выполнения C, msvcrt90.dll. Вы можете быть уверены, что у вас есть зависимость msvcrt90.dll, когда вы используете файлы #include компилятора VS2008.

Неопровержимый факт, что довольно скоро нужно перейти на .NET 4, вы будете бороться с подобными проблемами сборки, если не сделаете этого. Практических препятствий для этого очень мало: .NET 4 широко доступен бесплатно для всех целей, которые вы себе представляете. Преодоление FUD, связанное с переходом на более высокую версию времени выполнения, как правило, является только реальной проблемой. Нет причин для страха и сомнения, он стабилен.

Ганс Пассант
источник
8
Я теперь сделал эти шаги, но теперь я получаю сообщение об ошибке «MSB8009: .NET Framework 2.0 / 3.0 / 3.5 предназначается для набора инструментов платформы v90. Пожалуйста, убедитесь, что Visual Studio 2008 установлен на компьютере». У меня нет VS2008.
codymanix
8
Цитата из моего ответа: «Visual Studio 2008 SP1 должен быть установлен». Вам не хватает необходимых инструментов сборки.
Ганс Пассант
2
Может быть, вам нужно будет также удалить файл .suo и заново открыть решение. Как это было в моем случае.
alehro
Я получил это, просто установив Visual Studio 2008 Express (бесплатно). Я на самом деле получил массу ошибок, когда я изменил набор инструментов платформы на v90. Возвращение к v100 исправило их все!
simon.d
4
При создании .NET Framework 4.0-программ, использующих смешанные C ++ / CLI и C # -проекты с использованием Visual Studio 2010, установка .NET Framework 4.5 (или Visual Studio 2013, которая поставляется с .NET Framework 4.5) приводит к созданию C ++ / CLI-проектов в VS 2010 будет построен против 4.5 вместо 4.0. Если у вас есть C # -проекты, построенные на 4.0 в том же решении, которые ссылаются на C ++ / CLI-проекты, это нарушается. Вставка <TargetFrameworkVersion> v4.0 </ TargetFrameworkVersion> в файлы vcxproj C ++ / CLI-проектов решает эту проблему. \ o /
Даниэль Альбушат
18

Да, можно изменить цель даже для управляемых проектов C ++:

Изменение целевого .NET Framework для C ++ / CLI (VS 2010) Чтобы изменить версию .NET Framework для C ++ / CLI (VS 2010)

Щелкните правой кнопкой мыши по проекту в обозревателе решений и выберите «Выгрузить проект». Щелкните правой кнопкой мыши по незагруженному проекту в обозревателе решений и выберите «Редактировать <projectname>.vcxprojв проекте». XML-файл найти узел. <PropertyGroup Label="Globals">В этом узле найти узел <TargetFrameworkVersion>(если узел не может быть найден, добавить его). Внутренний текст узла определяет целевые рамки. Это может быть v2.0, v3.0, v3.5 или v4.0. Сохраните файл vcxproj и закройте его. Щелкните правой кнопкой мыши на незагруженном проекте в Solution Explorer и выберите «Обновить проект». <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

Примечание. Эти шаги применимы только для Visual Studio 2010, поскольку в нем используется новый формат файлов проекта C ++.

Источник на MSDN: Как: изменить целевую платформу .NET Framework

Брайан Р. Бонди
источник
5

анонимным пользователем:

(Редактирование, поскольку я новый пользователь и не могу ответить на это, кто бы ни счел это свободным, отправляет следующее). Изменение Toolset на v100 фактически заставляет VS2010 нацелиться на .NET 4.0, даже если он по-прежнему будет отображаться как нацелен на 3.5 в свойства проекта. VS2010 действительно должен выдать предупреждение об этом, потому что в настоящее время он выглядит как вы, хотя вы можете настроить таргетинг на .NET 3.5 с помощью набора инструментов v100, чего вы не можете.

hakre
источник
Это связано с тем, что многоцелевой таргетинг позволяет только нацеливаться на версии 2.0, 3.0, 3.5 и 4.0; Версии
1.Net .x
0

В VS 2010, если набор инструментов установлен, перейдите в свойства проекта-> свойства конфигурации-> общие и измените набор инструментов платформы с v90 на v100.

nche
источник