无法理解Net Core 3中的“单个文件可执行文件”功能

问题描述

在学习Single-file executables在net core 3.1中如何工作的同时,我创建了net core 3.1 C#控制台应用程序。如果编译由VS创建的认项目,则可以看到这组文件

enter image description here

为了运行此控制台应用程序,我必须分发3个文件-ConsoleNetCore.exe / dll / runtimeconfig

现在,我想改善发行故事,并且希望只分发一个文件,所以我没有exe和dll,而只有一个exe。如以上链接所述,并通过添加以下属性修改了我的项目文件

<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
<PublishSingleFile>true</PublishSingleFile>

因此整个项目文件为:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <RuntimeIdentifier>win10-x64</RuntimeIdentifier>
    <PublishSingleFile>true</PublishSingleFile>
  </PropertyGroup>
</Project>

然后,我重建了项目,并注意到netcoreapp3.1下有一个额外的文件夹win10-x64,其中有226个文件,主要是dll,包括ConsoleNetCore.exe。我从那里复制了exe并将其放在c:\ temp下并运行它并得到错误

要执行的应用程序不存在:'c:\ Temp \ ConsoleNetCore.dll'

然后我将那个dll复制到那里,并尝试再次运行exe,这次得到了:

遇到致命错误。在“ C:\ Program Files \ dotnet”中找不到执行该应用程序所需的库“ hostpolicy.dll”

很明显,我无法生成文件可执行文件,我原本希望是一个exe文件,而没有别的,所以我只能分发该文件,我是否误解了此功能?如何制作真正不需要任何其他文件的可执行文件

解决方法

我意识到仅仅重建是不够的,我应该从Visual Studio(或工具命令行)中发布:

enter image description here