У нас есть куча кода на C #, который ссылается на Prism.Core. Prism.Core — это переносимая библиотека классов. Когда мы ссылаемся на это в C ++ / CLI и пытаемся использовать команду делегата, мы получаем:
C4691: «System :: Object»: ссылка на тип ожидалась в сборке без ссылки «System.Runtime», вместо нее использовался тип, определенный в текущей единице перевода
Кто-нибудь может объяснить почему? И есть ли способ исправить, кроме перестройки исходного кода, чего я не хотел делать, так как Prism Nugeted в наш c # источник?
У меня была похожая установка с тем же предупреждением. Проект 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 #, исправило это в моем случае.
Других решений пока нет …