JasonZ
发布于 2025-07-01 / 25 阅读
0
0

.Net Core 9.0.x: WPF 在Github Action 上的实践(一)

实践项目地址:ModernShutdownScheduler

这里就给大家讲讲配置时遇到的坑

第一部分:.Net WPF打包详解

近期想复习下C#的WPF知识,写了个设定时间自动关机的小程序,由于常用Windows,选择了WPF

项目配置

.Net项目的配置网上已经有很多教程,这里就不在追述了,注意我们用的是WPF,所以立项目的时候选择的是WPF,而且是.Net 的,不是.Net Framework

发布文件(文件夹模式)

  • 本地编译可以直接生成exe可执行文件,但是那种只便于Coder本人调试使用,要给别人使用还是应当使用“发布”,而且最好是生成一个安装文件,可以供用户选择安装路径(单文件也可以,当功能不太多的时候)。

  • Visual Studio提供了发布功能,如下图所示,当然也可通过命令行(CLI)发布:dotnet publish -parameters
    下图为VS里提供的CIL
    发布功能,右键项目,选择发布,按照自己项目需求配置即可

如何发布一个WPF程序

注意:发布这里也有很多值得考虑的地方

发布配置

  1. 在发布的最后一步,部署模式有 依赖框架 独立 两种模式
    依赖框架:仅仅发布文件本身,不打包Runtime(文件小),需要使用者有对应的运行环境
    独立:打包程序的同时会,打包所使用的Runtime及其其他系统依赖,文件大,开箱即用无需其他配置

    依赖框架

    独立

  2. 打开文件发布选项,里面会有一个 生成单个文件 的选项,勾选之后就会生成“单个”exe文件,会自动将其他文件打包进exe内部。但是这里要注意,当前配置只会打包WPF框架的内容,有些windows组件并不会打包,例如VcRuntimexx.dll,如果想把他们全部打包,只生成一个文件,需要在项目文件(*.csproj)的PropertyGroup中添加IncludeAllContentForSelfExtract如下面所示,这样就能吧全部用到的依赖打包,相应的文件也会很大。

    <PropertyGroup>
     ...
     <IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
     ...
    </PropertyGroup>
  3. 也可以通过CLI发布

    dotnet publish *.csproj --configuration Release --self-contained false --output ./publish

    dotnet是.Net平台提供的工具,更推荐使用;
    *.csproj替换为你需要发布的项目文件,也可以是*.sln即是解决方案文件;
    --configuration表示要配置,可以简化为-c,表示配置为Release模式,编译器会作相应的优化;
    --self-contained即是VS里的部署模式,true表示打包Runtime(独立模式),false则是不打包(依赖框架模式)
    --output则是指定输出的目录
    上述的参数都可以不填写,在项目目录下,可以直接输入dotnet publish会自动寻找项目,使用的*.csproj内的参数发布

最后,在对应文件夹就能找到生成的可执行文件,当然不只是WPF文件可以使用,使用.Net平台的都可以用该方法发布,先就写这个小知识点吧,后面的坑后面再填

下期预告:*.msix / *.MSIXBundles(微软应用商店)文件打包方法


评论