【问题标题】:Can i compile .net Core 3 WPF application in Linux?我可以在 Linux 中编译 .net Core 3 WPF 应用程序吗?
【发布时间】:2019-09-26 12:30:33
【问题描述】:

.net Core 3.0 中添加了 WPF 支持

我可以在 Linux 或基于 Linux 的 docker 容器中编译 wpf 应用程序吗?

【问题讨论】:

  • 编译,可能。测试?很可能不会,除非您确保大多数可测试代码不在 WPF 应用程序中并且不依赖于任何特定于 Windows 的代码。如果您在 Windows 机器上启用了 WSL,则可以对此进行测试
  • “.net Core 3.0 中添加了 WPF 支持”,仅适用于 Windows。
  • @dymanoid 问题询问是否可以编译。您可以使用正确的运行时标识符在 Windows 上为 Ubuntu 编译
  • 您可以在 Windows 容器中的 Linux 服务器上运行 msbuild - 我过去曾以这种方式使用 CI 工具。
  • 我没有尝试过,但我怀疑您是否可以在 Windows 以外的任何其他平台上安装和使用在 .NET Core 3 上构建 WPF 应用程序所需的 Microsoft.NET.Sdk.WindowsDesktop。如果你运行一个 Windows 容器,它可能会工作。

标签: c# wpf .net-core-3.0


【解决方案1】:

你不能 - 我刚刚在 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 的目标文件本身引发,因此条件编译无济于事。在编译开始之前抛出错误。

一个好主意是将项目分成两部分,一个可以在任何操作系统中编译、重用和测试的“无头”库,以及一个可以在 Window 上构建的 UI 库。

【讨论】:

  • 据您所知,有没有办法“条件编译”(包括)仅适用于某个操作系统的一段代码?我的意思是创建一个单一的项目库,但在针对 Linux 时只公开部分 API。
  • SDK的targets文件遇到WPF项目时自身抛出的错误。您必须将项目分成两部分,一个“无头”项目和一个 UI 项目。无论如何,这是一个很好的设计,使测试和重用变得更加容易
  • 这就是我正在做的事情:我也认为这是一个很好的做法。但是,我只是想知道这在技术上是否可行。谢谢!
  • 谢谢。您的错误消息有助于找到一些有趣的讨论github.com/dotnet/wpf/issues/57#issuecomment-491918057
【解决方案2】:

很抱歉,即使使用 .NET Core,UI 框架 WinForms 和 WPF 也仅适用于 Windows。

相关:

【讨论】:

    猜你喜欢
    • 2021-10-28
    • 2019-05-26
    • 2018-05-28
    • 2010-09-16
    • 2023-04-05
    • 1970-01-01
    • 2011-01-16
    • 2017-05-22
    • 1970-01-01
    相关资源
    最近更新 更多