Использование C # dll (созданного с помощью Microsoft.bcl) в проекте взаимодействия (управляемом C ++)

у нас есть C # DLL в .net4.0, но построена с использованием Microsoft.bcl, Microsoft.bcl.async, Microsoft.bcl.build, Microsoft.net.http. Эти либы получили от nuget. У нас есть причины не переходить на .net4.5, но мы хотим использовать async, ждите от этих библиотек bcl.
В проектах C # все работает нормально, но мы не можем добавить эту DLL в наши проекты взаимодействия C ++, мы получаем эту ошибку:

Мы получаем эту ошибку, когда пытаемся добавить эту ссылку в проект.

Несмотря на то, что проект взаимодействия clr также находится в .net4.0, а DLL, которую мы добавляем, также находится в .net4.0, мы получаем эту ошибку. Есть ли способ решить эту проблему?

Error in text format:
---------------------------
Microsoft Visual Studio
---------------------------
Could not add a reference to:

C:\xxx\xxx\xx\xxxHelper.dllFor one of the following reasons:

- Targets a higher version of the .NET Framework

- Not a .NET assembly

- Not a registered ActiveX control
---------------------------
OK
---------------------------

код для воспроизведения этой проблемы: https://dl.dropboxusercontent.com/u/1967630/BCL_Problem/oAuth2_SDK_consumer_DLL/BCL_Problem_projects.zipx

5

Решение

Я репро, конечно, выглядит как ошибка. Судя по сообщению об ошибке на скриншоте, вы используете VS2013. Очень бесполезное сообщение, оно было смягчено в VS2015, но все еще терпит неудачу. Кстати, странная ошибка, похоже, она обрабатывает ссылку на сборку Microsoft.Threading.Task, которую ваш проект C # использует в качестве сборки фреймворка. Никаких предварительных вопросов об этой проблеме, о которых я знаю, большинство программистов понимают правильно, без необходимости бороться с машиной.

Вы должны рассмотреть возможность сделать это так, как они это делают, чтобы избежать этой ошибки. Это происходит только в том случае, если вы используете кнопку Обзор в диалоговом окне Добавить ссылку. Но работает просто отлично, когда вы используете ссылку на проект, так как большинство программистов предпочитают настраивать свое решение. Поэтому используйте File> Add> Existing Project, выберите ваш проект на C #. Затем снова добавьте ссылку, но на этот раз выберите проект C # из списка Solution> Projects вместо использования кнопки Browse.

Если по какой-то причине это нежелательно, вы можете обойти это другим способом. Откройте ваш .vcxproj в текстовом редакторе, Блокнот в порядке. Найдите этот элемент:

   <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

И измените номер версии на v4.5, Теперь добавьте ссылку, как вы делали раньше, с помощью кнопки «Обзор», на этот раз никаких жалоб. И вернитесь в Блокнот и измените номер версии обратно на v4.0

3

Другие решения

Если больше ничего не помогает, вы можете попытаться декомпилировать вашу dll. .Net сборки легко реверсивные.

Повторная компиляция может решить проблему (например, ваш dll из nuget может выглядеть как 4.5, а не 4.0).

0