如何从 C++ UWP App 引用 C# UWP Class 库

How to reference C# UWP Class Library from C++ UWP App

我在尝试从 C++ UWP 应用引用 C# UWP class 库中的方法时收到 COMException。这发生在最基本的设置中,所以我一定是做错了什么。

转载:

  1. 使用Visual Studio(我用的是16.5.4),新建一个"Blank App (Universal Windows - c++/CX)"
  2. 向解决方案添加新的 "Windows Runtime Component (Universal Windows)",C#,名为 "ClassLib"
  3. 将此方法添加到 Class1.cs:public static int GetNumber() { return 22; }
  4. 将 MainPage 构造函数修改为如下所示:
using namespace ClassLib;
MainPage::MainPage()
{
    InitializeComponent();

    auto foo = Class1::GetNumber();
}
  1. 执行申请。此异常发生在 MainPage 构造函数中:
Exception thrown at 0x76984402 in UWPApp.exe: 
  Microsoft C++ exception: 
    Platform::COMException ^ at memory location 0x0421DD44. 
    HRESULT:0x80131040 The text associated with this error code could not be found.

此问题是由于从 C++/CX 或 C++ WinRT 项目调用基于 .net 的 WinRT 组件所致。为了让它工作,你可以在你的 c++/cx 项目中添加 Microsoft.Net.Native.Compiler nuget 包并先安装它。然后右击项目->卸载项目->编辑.vcxproj。之后,在其中添加以下属性。

<PropertyGroup>
    <UseDotNetNativeToolchain Condition="'$(Configuration)'=='Release'">true</UseDotNetNativeToolchain>
    <DotNetNativeVersion>2.2.3</DotNetNativeVersion>
</PropertyGroup>

注意,将上面的2.2.3版本替换成你安装的Microsoft.Net.Native.Compilernuget包的版本。更详细的可以参考这篇类似的thread.