构建.NET Core控制台应用程序以生成EXE文件
摘要
本教程将介绍如何构建.NET Core控制台应用程序并在构建过程中生成EXE文件。
内容
对于目标为.NET Core 1.0的控制台应用程序项目,如果在构建过程中无法生成EXE文件,可以尝试以下方法解决该问题。该项目在调试时运行正常。
已经尝试了发布项目,但也无法生成EXE文件。这是合理的,因为EXE文件是特定于平台的,但是肯定有办法解决这个问题。搜索结果只提到了旧版本的.NET Core使用的project.json文件。
每次构建或发布时,只能获得以下内容:
最终被认可的答案是:
-
调试目的上可以使用DLL文件,可以使用
dotnet ConsoleApp2.dll
运行。如果想要生成EXE文件,必须生成一个自包含的应用程序。 -
生成一个自包含的应用程序需要指定目标运行时(特定于所选择的操作系统)。
之前的版本:在.csproj文件中添加目标运行时的运行时标识符(参考支持的RID列表):
1<PropertyGroup> 2 <RuntimeIdentifiers>win10-x64;ubuntu.16.10-x64</RuntimeIdentifiers> 3</PropertyGroup>
.NET Core 2.0 版本及更高版本无需进行上述步骤。
-
在发布应用程序时设置所需的目标运行时:
1dotnet publish -c Release -r win10-x64 2dotnet publish -c Release -r ubuntu.16.10-x64
参考答案:
-
如果接受使用批处理文件(bat文件),可以创建与DLL文件同名的批处理文件(放在同一文件夹中),然后复制以下内容:
1dotnet %~n0.dll %*
需要注意的是,此方法假定机器已经安装并全局可用.NET Core。
-
使用jo + curl + jq(或fx)的组合:
1jo value=30 type="Tip 3" targetModule="Target 3" configurationGroup=null name="Configuration Deneme 3" description=null identity="Configuration Deneme 3" | \ 2curl --json @- \ 3 -X POST \ 4 http://localhost:8080/xx/xxx/xxxx | \ 5jq
-
使用带有替代执行路径的Project.csproj:
1<Project Sdk="Microsoft.NET.Sdk"> 2 3 <PropertyGroup> 4 <TargetFramework>netcoreapp2.0</TargetFramework> 5 <OutputType>Exe</OutputType> <!--Adding this type will build an exe instead of a .dll--> 6 </PropertyGroup> 7 8</Project>
-
使用NET Core 2.x版本:
1<Project Sdk="Microsoft.NET.Sdk"> 2 3 <PropertyGroup> 4 -- <!-- Some properties here --> 5 </PropertyGroup> 6 7 <ItemGroup> 8 <PackageReference Include="Newtonsoft.Json" Version="10.0.3" /> <!-- Example of a NuGet Package Reference --> 9 </ItemGroup> 10 11 <ItemGroup> 12 <None Update="app.ico"> 13 <CopyToOutputDirectory>Always</CopyToOutputDirectory> 14 </None> 15 </ItemGroup> 16 17 <Target Name="Publish" AfterTargets="Build" Condition="'$(IsPublishing)' == 'true'"> 18 <!-- Some pre-publish tasks --> 19 <Exec Command="dotnet publish -c $(Configuration)" /> 20 </Target> 21 22</Project>
-
使用.NET Core SDK CLI工具:
1dotnet publish --output {output_directory} --runtime {runtime} --configuration {Debug|Release} -p:PublishSingleFile={true|false} -p:PublishTrimmed={true|false} --self-contained {true|false}
示例:
1dotnet publish --output "c:/temp/myapp" --runtime win-x64 --configuration Release -p:PublishSingleFile=true -p:PublishTrimmed=true --self-contained true
参考链接: