Проблемы при обновлении VS2008 до VS2010 с помощью управляемого и неуправляемого C ++

У меня есть решение VS2008 Professional, которое я пытался преобразовать в VS2010 Professional (RTM из загрузки MSDN), и я испытываю некоторые проблемы с некоторыми неуправляемыми и управляемыми библиотеками DLL C ++, на которые ссылается приложение C #.

Приложение C # настроено на .NET 3.5 (как это было в версии VS2008), но когда я пытаюсь скомпилировать его, я получаю много предупреждений, например:

Первичная ссылка «xxxx.dll» не может быть разрешена, поскольку она косвенно зависит от сборки .NET Framework «(различные имена сборок)», версии 4.0.0.0 ... которая имеет более высокую версию «4.0.0.0», чем версия "3.5.0.0" в текущей целевой платформе

и в конечном итоге я получаю отказ от сборки.

Из этого я понимаю, что это несоответствие версии .NET Framework. Итак, я смотрю на свойства неуправляемого проекта C ++ DLL и в разделе «Общие свойства-> Структура и ссылки» вижу «Целевая платформа: .NetFramework, Version = v4.0»

Итак, я иду WTF!?!?!?, Почему чистая C ++ DLL теперь нацелена на платформу .Net, когда этого, черт возьми, не было в версии VS2008. Затем я добавил к этому восклицанию, поскольку, похоже, это невозможно изменить. Я также смотрю на управляемый C ++ и вижу то же самое: таргетинг на .Net version = v4.0 и снова нет возможности изменить это вообще.

В общих свойствах C ++ есть запись «Поддержка среды CLR», и я установил для нее значение «Нет поддержки среды CLR», но, похоже, это ничего не дало.

Итак, у меня есть два вопроса:

  1. Почему моя чистая C ++ DLL теперь помечена как ориентированная на платформу .Net?

  2. Как я могу изменить / удалить этот таргетинг?

Решение

Согласно ответу Ганса и предоставленной им ссылке, теперь я вижу, что у меня есть 3 варианта:

  1. Оставайтесь на VS2008, и все работает

  2. Оставьте как VS2008 SP1 , так и VS2010 установленными, чтобы у меня были приложения .Net 3.5 C # и управляемый код C ++ согласно ссылке, предоставленной Хансом.

  3. Перенести все на VS2010 и перейти как минимум на .Net 4.0 для всех моих приложений на C #.

Мне действительно неприятно сделать этот выбор, поскольку MS сознательно решила нарушить функциональность при переходе с VS2008 на VS2010. Я не ожидал такого поведения. Я ожидал преобразовать проект и скомпилировать его без проблем так же, как при переходе с VS2005 на VS2008.

К счастью, мне действительно нужно перейти на .Net 4.0, но я просто не ожидал, что мне придется сделать это так скоро.

Обновить

Я решил перейти на платформу .Net 4 и столкнулся с проблемами со ссылками на управляемые проекты C ++ из проектов C #. При попытке добавить ссылку на проект управляемого кода C ++ я получал следующие ошибки

Ссылка на myproj не может быть добавлена. Сборка должна иметь расширение dll или exe, чтобы на нее можно было ссылаться.

Google провел меня по пути к "нельзя ссылаться на проект cli c из проекта c, разрешающего только сборку dll", который обнаружил, что в пути вывода управляемого проект c ++. Исходный путь вывода VS2008 был указан как

$(SolutionDir)\$(ProjectName)\$(Configuration)\

Но в проекте VS2010 макрос SolutionDir имеет конечный символ "\" (или версия VS2008 не заботится об этом), указывающий путь вроде

c:\projects\thisproject\solution\\projectname\configuration\

И VS2010 столкнулся с этим путем при попытке добавить ссылку на управляемый код C ++. Мое решение заключалось в том, чтобы изменить путь вывода на

$(SolutionDir)$(ProjectName)\$(Configuration)\

И теперь я (вроде) счастлив


person Peter M    schedule 29.06.2010    source источник


Ответы (1)


Будьте внимательны, вы получите предупреждение для управляемой сборки C ++. И настройка целевой платформы для неуправляемой DLL не имеет значения, она не будет использовать никакие ссылки .NET во время сборки.

Да, они не могут сделать настройку целевой платформы редактируемой в C ++ IDE, цепочка инструментов VS2008 требуется для создания сборок C ++ / CLI для 3.5. В этом сообщении в блоге объясняется обходной путь. Вы можете проголосовать за это статья обратной связи, если вас это не устраивает.

person Hans Passant    schedule 29.06.2010
comment
Да, эта ссылка хорошо это объясняет. Но сейчас меня больше всего раздражает. - person Peter M; 29.06.2010
comment
Вы правы насчет моего замешательства, но меня все же немного смущает то, что в свойствах неуправляемого C ++ даже упоминается инфраструктура .Net! - person Peter M; 30.06.2010