【发布时间】:2021-02-24 11:44:42
【问题描述】:
我在玩 .Net 5 时遇到了一些问题,所以我希望有人能对事情有所了解。在大型企业 .Net Framework 解决方案上工作了多年,.Net Core 似乎让我擦肩而过,我没有接触过它,这可能解释了我的一些困惑......
单元测试参考?
我创建了一个解决方案,其中包含一个 WPF 项目(“WPF App (.NET)”)和一个单元测试项目(“MSTest Test project (.Net Core)”)。两者都已在其属性页面中设置为“.NET 5”的目标框架。
当我从单元测试项目中引用 WPF 项目时,项目引用旁边会出现一个黄色三角形,并且错误列表窗口中出现以下错误:
项目“MyTestWpf.csproj”以“net5.0-windows”为目标。它不能被以 '.NETCoreApp,Version=v5.0' 为目标的项目引用
到底如何从 UT 项目中引用 WPF 项目?
引用 WPF 类型的类库?
我还创建了一个 .Net 5 类库,它需要引用各种 WPF 类型(控件等),但我不确定如何配置必要的程序集/框架引用(在框架世界中我会只需将程序集引用添加到 PresentationFramework、System.Xaml 等)。不知何故,通过反复试验,我确实得到了这个工作,在项目文件中使用这些行的组合:-
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<UseWPF>true</UseWPF>
以及将目标框架从“net5.0”更改为“net5.0-windows”。
但是我不确定实际上需要哪种组合,或者我什至应该手动编辑项目文件,如果不能通过 Visual Studio 完成,这感觉就像是倒退了一步!
【问题讨论】:
-
在 Core 开发的这一阶段,手动编辑项目文件相当普遍,因为 Visual Studio 的 UI 没有跟上 .NET 的快速发展。我知道在 .NET 中托管 WPF 内容需要
UseWPF设置,并且您的Sdk参考看起来是正确的。 -
如果你的单元测试库引用你的 WPF 项目,单元测试也必须以
net5.0-windows为目标。 -
@canton7 成功了。我想我理解为什么 tfm 需要是“net5.0-windows”,因为我猜“net5.0”是跨平台的,所以不会导致任何 Windows 桌面程序集被引用。但是我很想知道
的目的是什么,因为类库项目文件在构建之前需要这个和 tfm。有趣的是,UT 项目仅使用 tfm 构建。 -
是的,没错。 net5.0-windows 是 net5.0 的超集,可让您访问特定于 windows 的 api。我不确定 UseWpf 做了什么,是否需要引入 WPF 程序集,或者它是否会触发 WPF 需要的一些额外代码生成。
标签: c# .net wpf .net-core .net-5