.NET 5 未编译为单个文件可执行文件
.NET 5 not compiling to single file executables
我在通过 Visual Studio.
进行调试时遇到有关尝试将我的 .NET 5 应用程序编译为单个文件可执行文件的问题
我的 .csproject 文件如下。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net50</TargetFramework>
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishSingleFile>true</PublishSingleFile>
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
</Project>
我将我的运行时标识符设置为 winx64
并将发布单个文件设置为 true,但是在构建时我留下了一堆 DLL,我的应用程序使用这些 DLL 来构建它(总共共 272 个)。我在想——如何将这些 DLL 打包到这个应用程序中?我原以为将其发布为单个文件可执行文件已经可以做到这一点。
对于 .NET 5,要在发布项目时获得单个可运行的可执行文件,重要的属性是:
- PublishSingleFile
- 独立
- IncludeAllContentForSelfExtract
- 运行时标识符
您需要自己将它们包含在项目文件中,或者在命令行中指定它们。
项目文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<!--<OutputType>WinExe</OutputType>--><!--Use this for WPF or Windows Forms apps-->
<TargetFramework>net5.0</TargetFramework>
<!--<TargetFramework>net5.0-windows</TargetFramework>--><!--Use this for WPF or Windows Forms apps-->
<PublishSingleFile>true</PublishSingleFile>
<SelfContained>true</SelfContained>
<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
<RuntimeIdentifier>win-x64</RuntimeIdentifier><!--Specify the appropriate runtime here-->
</PropertyGroup>
</Project>
CLI:
dotnet publish -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeAllContentForSelfExtract=true
根据您的需要,还有其他值得考虑的属性,例如:
- PublishTrimmed
- 发布就绪
在此处查看文档页面:
https://docs.microsoft.com/en-us/dotnet/core/deploying/single-file
https://github.com/dotnet/designs/blob/main/accepted/2020/single-file/design.md
对于单文件应用程序,从 .net core 3.1 升级到 .net 6 时遇到了类似的问题,该应用程序在启动后立即退出。解决方案是将以下设置添加到发布命令
/p:IncludeAllContentForSelfExtract=true
我在通过 Visual Studio.
进行调试时遇到有关尝试将我的 .NET 5 应用程序编译为单个文件可执行文件的问题我的 .csproject 文件如下。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net50</TargetFramework>
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishSingleFile>true</PublishSingleFile>
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
</Project>
我将我的运行时标识符设置为 winx64
并将发布单个文件设置为 true,但是在构建时我留下了一堆 DLL,我的应用程序使用这些 DLL 来构建它(总共共 272 个)。我在想——如何将这些 DLL 打包到这个应用程序中?我原以为将其发布为单个文件可执行文件已经可以做到这一点。
对于 .NET 5,要在发布项目时获得单个可运行的可执行文件,重要的属性是:
- PublishSingleFile
- 独立
- IncludeAllContentForSelfExtract
- 运行时标识符
您需要自己将它们包含在项目文件中,或者在命令行中指定它们。
项目文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<!--<OutputType>WinExe</OutputType>--><!--Use this for WPF or Windows Forms apps-->
<TargetFramework>net5.0</TargetFramework>
<!--<TargetFramework>net5.0-windows</TargetFramework>--><!--Use this for WPF or Windows Forms apps-->
<PublishSingleFile>true</PublishSingleFile>
<SelfContained>true</SelfContained>
<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
<RuntimeIdentifier>win-x64</RuntimeIdentifier><!--Specify the appropriate runtime here-->
</PropertyGroup>
</Project>
CLI:
dotnet publish -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeAllContentForSelfExtract=true
根据您的需要,还有其他值得考虑的属性,例如:
- PublishTrimmed
- 发布就绪
在此处查看文档页面:
https://docs.microsoft.com/en-us/dotnet/core/deploying/single-file https://github.com/dotnet/designs/blob/main/accepted/2020/single-file/design.md
对于单文件应用程序,从 .net core 3.1 升级到 .net 6 时遇到了类似的问题,该应用程序在启动后立即退出。解决方案是将以下设置添加到发布命令
/p:IncludeAllContentForSelfExtract=true