.net-core - 无法理解 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 文件,所以我可以简单地分发该文件,我是否误解了这个功能?如何制作不需要任何其他文件的真正单一的可执行文件?
解决方案
推荐阅读
- scala - Scala 闭包 - 这些闭包如何作为高阶函数的参数工作
- c# - 是否可以在 ASP MVC 中创建一个包含复选框列表的下拉列表?
- visual-studio-code - VSCODE 远程容器 - 避免在重建时重新安装扩展
- flutter - 仅更新 Flutter 上列表视图构建器上的选定位置文本颜色
- python - 排序操作使用的 RAM 超过了最大 33.5 MB
- python - Jupyter:打印所有函数参数
- vue.js - Vue.js 西班牙语字符编码问题
- jsp - jsp动态设置src图片
- typo3 - TYPO3 低级数据库关系始终为空
- java - 通过 Java 在 JMeter 中的转换错误。缺少哪些依赖项?