首页 > 解决方案 > 无法理解 Net Core 3 中的“单文件可执行文件”功能

问题描述

在学习单文件可执行文件如何在 net core 3.1 中工作时,我创建了 net core 3.1 C# Console Application。如果我编译VS创建的默认项目,可以看到这组文件

在此处输入图像描述

为了运行这个控制台应用程序,我必须分发 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 文件,所以我可以简单地分发该文件,我是否误解了这个功能?如何制作不需要任何其他文件的真正单一的可执行文件?

标签: .net-core

解决方案


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

在此处输入图像描述


推荐阅读