首页 文章

构建.NET Core控制台应用程序以输出EXE?

提问于
浏览
196

对于面向.NET Core 1.0的控制台应用程序项目,我无法弄清楚如何在构建期间输出.exe . 项目在调试中运行良好 .

我已经尝试发布该项目,但这也不起作用 . 有道理,因为.exe将是特定于平台的,但必须有一种方法 . 我的搜索只引用了使用project.json的旧版.Net Core版本 .

无论何时我 Build 或发布,这都是我得到的 .

build directory

2 回答

  • 264

    出于调试目的,您可以使用dll . 您可以使用 dotnet ConsoleApp2.dll 运行它 . 如果要生成exe,则必须生成自包含的应用程序 .

    要生成自包含的应用程序(在Windows中为exe),您必须指定目标运行时(您定位的OS) .

    仅限Pre-.NET Core 2.0:首先,在csproj(list of supported rid)中添加目标运行时的运行时标识符:

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

    从.NET Core 2.0开始不再需要上述步骤 .

    然后,在发布应用程序时设置所需的运行时:

    dotnet publish -c Release -r win10-x64
    dotnet publish -c Release -r ubuntu.16.10-x64
    
  • 5

    以下将在输出目录中生成

    • 所有包引用

    • 输出组件

    • bootstrapping exe

    但不包含所有netcore运行时程序集

    <PropertyGroup>
      <Temp>$(SolutionDir)\packaging\</Temp>
    </PropertyGroup>
    
    <ItemGroup>
      <BootStrapFiles Include="$(Temp)hostpolicy.dll;$(Temp)$(ProjectName).exe;$(Temp)hostfxr.dll;"/>
    </ItemGroup>
    
    <Target Name="GenerateNetcoreExe"
            AfterTargets="Build"
            Condition="'$(IsNestedBuild)' != 'true'">
      <RemoveDir Directories="$(Temp)" />
      <Exec
        ConsoleToMSBuild="true"
        Command="dotnet build $(ProjectPath) -r win-x64 /p:CopyLocalLockFileAssemblies=false;IsNestedBuild=true --output $(Temp)" >
        <Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
      </Exec>
      <Copy
        SourceFiles="@(BootStrapFiles)"
        DestinationFolder="$(OutputPath)"
      />
    
    </Target>
    

    我把它包裹在这里的样本https://github.com/SimonCropp/NetCoreConsole

相关问题