Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Peter MОтветов: 1

У меня есть решение 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)\

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

c++visual-studio-2010managed-c++visual-studio-2008-sp1

Ответы

Ответ 1 · рейтинг 3 · Hans Passant

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы