我可以,在Linux上编译.NET Core 3的WPF应用程序吗?

4

.NET Core 3.0新增了对WPF的支持。

我能在Linux或基于Linux的Docker容器中编译WPF应用程序吗?


编译,很可能需要。测试?除非你确保大部分可测试的代码不依赖于任何特定于Windows的内容并且不包含在WPF应用程序中。如果你在Windows机器上启用了WSL,你可以测试这个。 - Panagiotis Kanavos
".NET Core 3.0增加了对Windows的WPF支持。" - dymanoid
@dymanoid 这个问题问的是编译是否可行。你可以通过使用正确的运行时标识符在 Windows 上为 Ubuntu 进行编译。 - Panagiotis Kanavos
你可以在运行 Windows 容器的 Linux 服务器上运行 msbuild - 我以前就是这样使用 CI 工具的。 - Andy
1
我没有尝试过,但我怀疑除了Windows平台之外,您无法安装和使用构建.NET Core 3上的WPF应用程序所需的“Microsoft.NET.Sdk.WindowsDesktop”。如果您运行Windows容器,则可能可以正常工作。 - mm8
2个回答

13

你做不到 - 我刚在WSL2上尝试了这个。如果你输入dotnet new,WPF模板将会出现,但结果是

dotnet new wpf

还原步骤失败

The template "WPF Application" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on wpftest/wpftest.csproj...
/usr/share/dotnet/sdk/3.0.100/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(59,5): 
error NETSDK1100: Windows is required to build Windows desktop applications. 

这个错误是由SDK的目标文件本身抛出的,因此条件编译无法帮助解决。在编译开始之前即抛出该错误。

一个好的想法是将项目分成两部分:一个“无界面”库,可以在任何操作系统中进行编译、重用和测试,以及一个可以在Windows上构建的UI库。


1
据你所知,是否有任何方法可以进行“条件编译”(包括)仅针对某个操作系统的代码部分?我的意思是创建一个单一项目库,但仅在针对Linux时公开部分API。 - Mario Vernari
1
当SDK遇到WPF项目时,错误是由SDK的targets文件本身抛出的。您需要将项目分为两个部分,“无头”项目和UI项目。无论如何,这都是一个很好的设计,可以使测试和重用变得更加容易。 - Panagiotis Kanavos
这正是我正在做的,我也认为这是一个好的实践。不过,我只是想知道这是否在技术上可行。谢谢! - Mario Vernari
谢谢。你的错误信息帮助我找到了一些有趣的讨论 https://github.com/dotnet/wpf/issues/57#issuecomment-491918057 - Dmitrii Dovgopolyi

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接