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

ken*_*ada 370 .net-core

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

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

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

构建目录

mez*_*tou 441

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

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

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

<PropertyGroup>
    <RuntimeIdentifiers>win10-x64;ubuntu.16.10-x64</RuntimeIdentifiers>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

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

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

dotnet publish -c Release -r win10-x64
dotnet publish -c Release -r ubuntu.16.10-x64
Run Code Online (Sandbox Code Playgroud)

  • Hello World控制台应用程序超过60MB! (68认同)
  • 对于.NET Core 2.0,可以在Visual Studio中完成吗?或者我必须手动输入这些命令? (24认同)
  • 我认为这只能通过CLI完成.顺便说一句,从.net core 2开始,你不需要在csproj中设置`RuntimeIdentifier`. (14认同)
  • @mikolaj只有一个目标运行时"可移植".有没有办法把所有目标都纳入其中?我可以使用命令行,但是认为这是后退一步. (12认同)
  • 这是可用的运行时标识符列表(例如win10-x64,linux-x64等):https://docs.microsoft.com/en-us/dotnet/core/rid-catalog (12认同)
  • 这不会创建独立的可执行文件。这将创建一个可执行文件,以及大量其他文件(在我的发布文件夹中)。包括一些带有自己文件的子文件夹。有没有办法创建一个真正的__standalone__可执行文件? (8认同)
  • @shox有关如何减少应用程序大小的信息,请参见[this](https://ianqvist.blogspot.com/2018/01/reducing-size-of-self-contained-net.html). (6认同)
  • 右键单击项目,发布并将目标运行时设置为所需的环境和输出路径.但x64目标会臃肿! (5认同)
  • 我厌倦了回到这里寻找命令行参数,所以我为任何寻找一个的人制作了一个简单的GUI.随意改进; 这只是大约30分钟的工作/测试.https://github.com/spacekh/DotNetPublish (5认同)
  • 你一定是在跟我开玩笑。庞大而昂贵的IDE,我必须打开该死的控制台窗口才能生成EXE?没门。 (3认同)

Fra*_*hes 83

UPDATE(31-OCT-2019) 对于任何想要通过GUI和执行以下操作的人:

  • 正在使用Visual Studio 2019
  • 已安装.NET Core 3.0(包含在最新版本的Visual Studio 2019中)
  • 想要生成一个文件

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

注意

注意这么小的应用程序的文件很大 在此处输入图片说明

您可以添加“ PublishTrimmed”属性。该应用程序将仅包括该应用程序使用的组件。注意:如果您使用反射,请不要这样做

在此处输入图片说明

重新发布

在此处输入图片说明


上一篇

对于正在使用Visual Studio并希望通过GUI进行操作的任何人,请参见以下步骤:

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

  • 不幸的是,输出是一堆文件,而不仅仅是像旧的.NET Framework这样的EXE。 (12认同)
  • 不过,可笑的是,当您针对 .NET Core 时,.NET IDE 根本不支持最基本的功能。这就是每个人创建跨平台命令行应用程序必须瞄准的目标 - 例如编译器。 (4认同)
  • @Tomas Karban - 直到我将部署模式更改为“自包含”之后才会出现这种情况 更改 exe 文件也出现在发布文件夹中 :-) (2认同)

Sim*_*mon 16

以下将在输出目录中生成

  • 所有包参考
  • 输出组件
  • 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>
Run Code Online (Sandbox Code Playgroud)

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