.net 正确的方式发布WinUI3应用程序在单个.exe文件

ddarikpa  于 2023-04-22  发布在  .NET
关注(0)|答案(1)|浏览(1016)

我已经在winui3中创建了一个项目,但是,我就是找不到一种方法将应用程序发布到一个单独的.exe文件中。

  • 当我使用JetBrains骑手发布单个.exe文件时,它无法启动。
  • 而使用visual studio发布的打包应用程序不会通过单击.exe文件启动应用程序,而是只能通过visual studio启动。
  • 在未打包的发布中,.exe文件(仍然不是单个文件)可以运行,但我的大多数资产在执行这行代码时都不会加载并抛出错误

AppNotificationManager.Default.Show(new AppNotificationBuilder().AddText("Text").BuildNotification());
我有一些要求:

  • 发布后,会生成一个.exe文件,我可以在某个地方共享或上传,而无需任何其他依赖项。
  • 我的应用程序使用任务调度程序在另一个示例中通过Environment.ProcessPath运行自己。因此,应用程序必须通过.exe文件运行。
  • 发送通知是可选的,我愿意在没有通知的情况下发布我的应用程序。

除此之外,我还看到了微软的PowerToys应用程序,我很确定它也是用winui3制作的,他们设法在他们的github页面上提供了一个.exe。
如果有人能帮我这个忙,我将非常感激。

TLDR:如何在winui3下生成单个.exe文件,运行

htrmnn0y

htrmnn0y1#

首先,至少在这一刻,你不能为WinUI 3创建一个单独的EXE文件。PowerToys也不例外,我猜你说的是它的安装程序
你可以做的是这2个配置。视频来自我的频道,如果你有兴趣。

  • 使您的应用程序非打包(未打包)和自包含。(video
  • 减少输出文件夹中不必要的文件夹。(video

TLDR:您的 *.csproj应该有以下行:

<Project ...>
  <PropertyGroup>

    ...

    <WindowsPackageType>None</WindowsPackageType>
    <WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
  </PropertyGroup>

  ...

  <Target Name="RemoveFoldersWithMuiFiles" AfterTargets="Build">
    <ItemGroup>
      <RemovingFiles Include="$(OutDir)*\*.mui" Exclude="$(OutDir)en-us\*.mui" />
      <RemovingFolders Include="@(RemovingFiles->'%(RootDir)%(Directory)')" />
    </ItemGroup>
    <RemoveDir Directories="@(RemovingFolders)" />
  </Target>
</Project>

相关问题