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