У меня есть решение 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», но, похоже, это ничего не дало.
Итак, у меня есть два вопроса:
Почему моя чистая C ++ DLL теперь помечена как ориентированная на платформу .Net?
Как я могу изменить / удалить этот таргетинг?
Решение
Согласно ответу Ганса и предоставленной им ссылке, теперь я вижу, что у меня есть 3 варианта:
Оставайтесь на VS2008, и все работает
Оставьте как VS2008 SP1 , так и VS2010 установленными, чтобы у меня были приложения .Net 3.5 C # и управляемый код C ++ согласно ссылке, предоставленной Хансом.
Перенести все на 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)\
И теперь я (вроде) счастлив