Змініть проект C ++ / CLI на інший фреймворк, ніж 4.0 з vs2010


153

Оскільки я модернізував проект до формату проектів візуальної студії 2010 року, мій проект C ++ / CLI орієнтований на .net Framework 4.0.

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

Відповіді:


190

Це відображається при натисканні на F1 у діалоговому вікні Framework and References:

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

Це не дуже точно для перетворених проектів, вам доведеться додавати <TargetFrameworkVersion>елемент самостійно. Помістіть його в PropertyGroup з написом "Глобали":

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

Історія відрізняється, коли ви використовуєте VS2012 та новіші версії, першу версію VS, яка придбала налаштування набору інструментів платформи на сторінці загальних властивостей. Потім потрібно вибрати "v90", щоб отримати належну збірку, націлену на 3.5. Однак це незграбно, у вас повинні бути встановлені всі проміжні версії VS на машині, щоб мати доступ до цього вибору.

Чому вам потрібен встановлений VS2008, потрібне пояснення саме собою. Основна проблема полягає в тому, що бібліотека виконання C (msvcrt100.dll і вище) містить .NET-код для підтримки керованого виконання коду. Найважливішою деталлю є ініціалізатор модулів, який забезпечує правильну ініціалізацію CRT у програмі, що використовує код C ++ / CLI. Цей код завжди націлений. Ви завжди можете мати лише чисту залежність 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.
кодиманікс

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 та закрити його Клацніть правою кнопкою миші на завантажений проект у Провіднику рішень та натисніть Перезавантажити приклад проекту <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

Примітка. Ці кроки застосовуються лише для Visual Studio 2010, оскільки він використовує новий формат файлів проекту C ++.

Джерело в MSDN: Як: Змінити цільову .NET Framework


5

анонімним користувачем:

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


Це пояснюється тим, що багатоцільове націлювання дозволяє націлювати лише V2.0, 3.0, 3.5 та 4.0; Версії 1.x .Net не можуть бути націлені таким чином
Jeroen Landheer

0

У VS 2010, якщо встановлений набір інструментів, перейдіть до властивостей проекту-> налаштування властивостей-> загального та змініть набір інструментів платформи з v90 на v100.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.