问题描述
在学习Single-file executables在net core 3.1中如何工作的同时,我创建了net core 3.1 C#控制台应用程序。如果编译由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文件,而没有别的,所以我只能分发该文件,我是否误解了此功能?如何制作真正不需要任何其他文件的可执行文件?