【问题标题】:PublishSingleFile does not produce a single executablePublishSingleFile 不生成单个可执行文件
【发布时间】:2020-07-15 07:39:03
【问题描述】:

我有一个 .Net Core 3 控制台应用程序,我正在尝试将其发布为自包含的单个可执行文件。我过去能够做到这一点,但令我惊讶的是它不再起作用。项目结构是一个带有两个程序集的控制台应用程序,都在 Core 3 中。

如果我使用dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true,我希望输出是几个 mb 大小的单个可执行文件。然而,发布文件夹包含可执行文件(几百 kb)和一个 .dll 文件以及 .cache 文件和 pdb。

我的控制台应用的配置如下:

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <LangVersion>latest</LangVersion>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <Nullable>enable</Nullable>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
    <PublishSingleFile>true</PublishSingleFile>
    <PublishTrimmed>true</PublishTrimmed>
  </PropertyGroup>

如果我直接从 Visual Studio 发布应用程序,我会得到与上述相同的结果。

所以我的问题归结为:为什么这个配置或发布语句不会产生一个自包含的单个可执行文件?

【问题讨论】:

  • 我过去能够做到这一点,但令我惊讶的是它不再有效 .NET Core 3 中引入了一些选项。尝试删除 @987654323 @第一
  • @PavelAnikhouski 没有区别,无论是来自 CLI 还是 VS。

标签: c# visual-studio .net-core


【解决方案1】:

我可以通过以下方式发布我的 3.1 控制台应用程序:

<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121. 
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration>Release</Configuration>
    <Platform>Any CPU</Platform>
    <PublishDir>..\..\Binaries\</PublishDir>
    <PublishProtocol>FileSystem</PublishProtocol>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
    <PublishSingleFile>True</PublishSingleFile>
    <PublishReadyToRun>False</PublishReadyToRun>
    <DebugType>None</DebugType>
  </PropertyGroup>
</Project>

如果我将 PublishReadyToRun 设置为 True(或将 PublishTrimmed 添加为 True),它会失败。添加 DebugType None 会阻止它发布 exe 的 pdb 文件。

更新:删除 SelfContained 标记会阻止它创建“dotnetcoreapp3.1”文件夹。

【讨论】:

  • 添加 属性为我完成了工作。请问这个技巧背后的原因/解释,以防止.pdb文件被生成?
【解决方案2】:

根据命令行发布,我测试成功。生成了一个可执行文件。如果你总是发布失败,建议你使用VS发布。发布过程如下:

1.右键项目->发布

2.更改配置

3.保存配置并点击发布

【讨论】:

  • 您好,感谢您的回复,但是正如我所提到的,它通过命令行和 Visual Studio 发布都失败了。两者都没有错误。
猜你喜欢
  • 2010-09-11
  • 2012-12-23
  • 2018-11-14
  • 1970-01-01
  • 2015-11-01
相关资源
最近更新 更多