C# cmake 构建中的 XAML 文件冲突

Posted

技术标签:

【中文标题】C# cmake 构建中的 XAML 文件冲突【英文标题】:XAML file conflict in C# cmake build 【发布时间】:2021-10-21 13:01:12 【问题描述】:

我在这里有一个 C# CMake 项目,https://github.com/jarl-haggerty/cmake-test。它由两个包含 UserControl1.xaml 但具有不同命名空间的库组成。如果我生成 Visual Studio 2019 解决方案并交替构建两个库,则在构建库 One 时会收到以下错误:

1>C:\Users\jarl\source\repos\test\One\UserControl1.xaml.cs(9,13,9,32): error CS0103: The name 'InitializeComponent' does not exist in the current context
1>C:\Users\jarl\source\repos\test\build\obj\x64\Debug\UserControl1.xaml(9,95,9,117): error CS1061: 'UserControl1' does not contain a definition for 'innerRect_MouseDownTwo' and no accessible extension method 'innerRect_MouseDownTwo' accepting a first argument of type 'UserControl1' could be found (are you missing a using directive or an assembly reference?)

如果我删除了 obj/x64/Debug 中的所有文件,那么构建会再次开始工作。该文件夹似乎是两个库中构建文件的目标,并且从错误中听起来两个版本的 UserControl.xaml 混淆了。 C++ 项目将在 One.dir 和 Two.dir 文件夹中分离构建。这是可以预料的吗?有解决方法吗?我正在尝试将具有这样几个案例的 Visual Studio 项目移植到 cmake。

【问题讨论】:

您的项目类型是什么,UWP、WPF 还是其他? 我认为是 WPF。我链接到的 repo 重现了这个问题。 【参考方案1】:

如果我将 add_library 调用放在单独的 CMakeLists.txt 文件(One/CMakeLists.txt 和 Two/CMakeLists.txt)中,则构建在不同的文件夹中运行,这解决了我的问题。

【讨论】:

以上是关于C# cmake 构建中的 XAML 文件冲突的主要内容,如果未能解决你的问题,请参考以下文章

VS 2017 中的 CMake 在构建时不显示构建日志

如何在CMAKE和CLION中的每次构建后运行复制脚本? [重复]

CMake 找不到源文件,但在 TFS 构建定义中的 CMakeLists.txt 中未指定文件

如何在使用 CMake 构建时列出 .hpp 头文件

cmake与make的项目构建快速上手

CMake configure_file没有源代码构建