VS2017将NetCoreApp编译为EXE

aja*_*987 63 .net-core visual-studio-2017

我在Visual Studio 2017中创建了一个NetCoreApp(v1.1).当我编译它时,我得到一个DLL,而不是生成的项目的预期EXE.我确实检查了csproj文件并确认输出类型设置为exe,但没有骰子.

任何想法为什么VS2017仍在生成DLL?我确定它在某个地方快速设置,我忘记了...它也是凌晨1点.:)

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <PlatformTarget>AnyCPU</PlatformTarget>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\Core.EF.SqlServer\Core.EF.SqlServer.csproj" />
  </ItemGroup>

</Project>
Run Code Online (Sandbox Code Playgroud)

Mar*_*ich 90

.NET Core应用程序应该是.dll文件.在这种情况下--self-contained设置为true"可执行"并执行所有必要的操作以确保输出可运行(.dll方法,OutputType文件的入口点).生成的dll文件应使用以下命令运行:

dotnet publish -r win-x64 -p:PublishSingleFile=True --self-contained false
Run Code Online (Sandbox Code Playgroud)

此dll文件适用于.net核心运行时(windows,linux,macOS)支持的所有平台.这称为"可移植"或"依赖于框架"部署.

如果您真的想要一个Exe文件,请考虑自包含部署.这将创建一个包含其自己的.net核心运行时副本和Main()文件的输出 - 但它也会增加已发布应用程序的大小,并且需要在发布新版本的运行时时更新它.此外,生成的应用程序仅适用于发布的操作系统.

有关部署选项以及如何设置它们的更多详细信息,请参阅.NET Core应用程序部署.

  • 感谢有关不同部署策略的信息.这有助于我对.net-core的理解更多一点. (7认同)

R.T*_*tov 54

在VS2017

  1. 右键单击您的项目,然后选择发布
  2. 选择"文件夹"并创建新的配置文件
  3. 在"发布"标签中,点击"配置..."
  4. 选择部署模式:自包含,目标运行时:win-x86(或win-x64)
  5. 保存
  6. 发布

在文件夹\ bin\Debug \netcoreapp2.1\win-x86 \中,您将看到EXE文件

发布设置

  • 谢谢!很高兴知道在Visual Studio中有一种方法可以做到这一点。 (2认同)

Mar*_*oth 7

从.NET Core 2.2开始,您可以构建框架相关的可执行文件

尽管构建自包含部署可能是一个很好的解决方案,但它也有其自身的缺点。(请参阅R.Titov和Martin Ullrichs关于SCD-s的回答。)

幸运的是,.NET Core 2.2支持所谓的框架相关可执行文件 -s 的构建,该文件本质上是标准dll-s 的包装二进制文件(Windows 上为.exe

这样,您就拥有了标准框架依赖部署的所有优点(和缺点)(再次参见Martin的回答),但是您有一种方便的启动方式,而不必通过dotnet CLI 调用它。

您可以使用以下语法将应用程序发布为依赖框架的可执行文件

dotnet publish -c Release -r <RID> --self-contained false
Run Code Online (Sandbox Code Playgroud)

RID是通常的运行时标识,例如,win-x64或您希望构建的任何平台(请参见此处的目录)。