2

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

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

первичной ссылки «хххх. dll "мог бы быть не был разрешен, поскольку он имел косвенную зависимость от .NET. Рамочная сборка" (различная сборка имен) ", версия 4.0.0.0 ... которая имеет более высокую версию" 4.0.0.0 ", чем версия "3.5.0.0" в текущем целевой каркас

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

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

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

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

Поэтому у меня есть два вопроса:

  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, но я просто не ожидал, что так скоро это сделаю.

Update

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

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

Google ведет меня вниз путь к «cli c project cannot be referenced from c project allowing only assembly dll», который оказался, что был посторонним «\» в пути выхода управляемого с ++ проектом. Оригинальный выход VS2008 путь был определен как

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

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

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

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

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

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

ответ

3

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

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

+0

Да, эта ссылка объясняет это хорошо. Но теперь я больше раздражен, чем что-либо. –

+0

Вы правы насчет моей путаницы, но я все еще немного откладываю, что свойства неуправляемого C++ даже упоминают .Net framework! –