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

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

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

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

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

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

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

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

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

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

  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 framework и столкнулся с проблемами со ссылками на управляемые проекты c ++ из проектов c #.При попытке добавить ссылку на проект управляемого кода c ++

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

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

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

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

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

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

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

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

1 Ответ

3 голосов
/ 29 июня 2010

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

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

...