我想编写一个WPF应用程序,但要尽可能在现代框架上构建它,包括例如.NET 6甚至更高版本.
我有一些我想调用的C++代码,而且我喜欢WinRT作为组件模型,而不是低级P/Expresske.
我已经成功地使用csWinRT将我的C++代码集成到WinUI 3应用程序中.现在我try 用我的WPF应用程序做同样的事情.我的try 可以在https://github.com/mmarczell-graphisoft/winrtbug处看到
只要我的WPF C#代码中没有using指令,也没有任何使用这些定义的代码,C#投影文件就会在obj\guarding/net6.0-Windows\Generated Files\csWinRT下生成.然而,一旦我输入using指令并重建,该文件就不再存在了.
我做错了什么?
我发现了一些有关类似用例的文档,但它们已经有一些年的历史了,似乎并不直接适用.
最初,不支持在非打包应用程序中使用WinRT组件. https://github.com/microsoft/cppwinrt/issues/256
然后在2019年宣布推出"免注册WinRT": https://blogs.windows.com/windowsdeveloper/2019/04/30/enhancing-non-packaged-desktop-apps-using-windows-runtime-components/
带示例代码: https://github.com/microsoft/RegFree_WinRT
然而,对于.NET 5,直接引用.winMD的功能已从.NET中删除,并提取到csWinRT包中: https://github.com/microsoft/CsWinRT
这就是我未能正确配置的地方.该文档指出,直接项目引用是不可能的,而是应该使用两阶段的构建过程,第一阶段将库打包为NuGet包,顶层应用程序引用它. https://learn.microsoft.com/en-us/windows/apps/develop/platform/csharp-winrt/net-projection-from-cppwinrt-component
然而,GitHub讨论中的MS员工一再暗示这实际上是不必要的,因为csWinRT通过直接引用项目来支持更简单的工作流程,例如 https://github.com/microsoft/CsWinRT/discussions/1072#discussioncomment-8497693和https://github.com/microsoft/CsWinRT/issues/1289#issuecomment-1481878399
我还将这个问题作为GitHub问题提交: https://github.com/microsoft/CsWinRT/issues/1543