构建.NET Core控制台应用程序以生成EXE文件

摘要

本教程将介绍如何构建.NET Core控制台应用程序并在构建过程中生成EXE文件。

内容

对于目标为.NET Core 1.0的控制台应用程序项目,如果在构建过程中无法生成EXE文件,可以尝试以下方法解决该问题。该项目在调试时运行正常。

已经尝试了发布项目,但也无法生成EXE文件。这是合理的,因为EXE文件是特定于平台的,但是肯定有办法解决这个问题。搜索结果只提到了旧版本的.NET Core使用的project.json文件。

每次构建或发布时,只能获得以下内容:

Build directory

最终被认可的答案是:

  1. 调试目的上可以使用DLL文件,可以使用dotnet ConsoleApp2.dll运行。如果想要生成EXE文件,必须生成一个自包含的应用程序。

  2. 生成一个自包含的应用程序需要指定目标运行时(特定于所选择的操作系统)。

    之前的版本:在.csproj文件中添加目标运行时的运行时标识符(参考支持的RID列表):

    1<PropertyGroup>
    2    <RuntimeIdentifiers>win10-x64;ubuntu.16.10-x64</RuntimeIdentifiers>
    3</PropertyGroup>
    

    .NET Core 2.0 版本及更高版本无需进行上述步骤。

  3. 在发布应用程序时设置所需的目标运行时:

    1dotnet publish -c Release -r win10-x64
    2dotnet publish -c Release -r ubuntu.16.10-x64
    

参考答案:

  1. 如果接受使用批处理文件(bat文件),可以创建与DLL文件同名的批处理文件(放在同一文件夹中),然后复制以下内容:

    1dotnet %~n0.dll %*
    

    需要注意的是,此方法假定机器已经安装并全局可用.NET Core。

  2. 使用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
    
  3. 使用带有替代执行路径的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>
    
  4. 使用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>
    
  5. 使用.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
    

参考链接:


相关文章推荐