Как проект C++/CLI может ссылаться на переносимую библиотеку классов?

У нас есть куча кода C#, который ссылается на Prism.Core. Prism.Core — переносимая библиотека классов. Когда мы ссылаемся на это в C++/CLI и пытаемся использовать команду делегата, мы получаем:

C4691: «System:: Object»: тип, на который ссылаются, ожидался в сборке «System.Runtime» без ссылки, вместо этого использовался тип, определенный в текущей единице перевода.

Кто-нибудь может объяснить, почему? И есть ли способ исправить, кроме пересборки исходного кода, чего я не хотел делать, поскольку Prism Nugeted в наш исходный код С#?


person intinit    schedule 22.03.2016    source источник


Ответы (1)


У меня была аналогичная установка с тем же предупреждением. Проект C# ссылался на пакет NuGet с несколькими целевыми платформами. Поскольку управляемые пакеты NuGet нельзя добавлять в проекты C++/CLI, для этого проекта необходимо вручную добавить ссылку. Добавленная вручную ссылка оказалась на DLL для другой целевой платформы в пакете NuGet. Что-то типа:

CSharpProject.csproj -> packages\Prism.Core.6.2.0\lib\portable-win+net45+wp80+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Prism.dll
CppCliProject.vcxproj -> packages\Prism.Core.6.2.0\lib\net45\Prism.dll

Изменение ссылки в проекте C++/CLI для использования той же DLL, что и в проекте C#, исправило это в моем случае.

person Chris    schedule 06.10.2016