Visual Studio 2017 .net核心自包含部署-发布目录和win-x64目录之间的区别

时间:2018-10-27 06:34:08

标签: .net-core visual-studio-2017

我已在Windows 10上使用.NET Core SDK v2.1.403安装了Visual Studio 2017 15.8.7。我正在尝试为dotnet核心控制台应用程序创建一个自包含的部署。当Visual Studio发布该应用程序时,它正在创建一个发布目录和一个win-x64目录,但我不确定哪个目录是用于部署控制台应用程序的正确目录。

我正在关注dotnet core app deployment documentation。这是我的.pubxml文件的内容:

<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121. 
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <PublishProtocol>FileSystem</PublishProtocol>
    <Configuration>Debug</Configuration>
    <Platform>Any CPU</Platform>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <PublishDir>bin\Debug\netcoreapp2.1\publish\</PublishDir>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
    <SelfContained>true</SelfContained>
    <_IsPortable>false</_IsPortable>
  </PropertyGroup>
</Project>

文档说,输出将放置在PublishDir中,而我将其设置为bin\Debug\netcoreapp2.1\publish\。发布应用程序时,在bin\Debug\netcoreapp2.1中看到两个目录-一个发布目录和一个win-x64目录。 win-x64目录中的项目比发布目录少得多。仅是我的项目输出,一个用于我的应用程序的.exe文件以及以下文件:hostfxr.dllhostpolicy.dll<myappname>.deps.json。 publish目录包含所有这些文件以及更多dll。这是我期望进行独立部署的方式。

这两个目录有什么区别?

文档说:

  

请注意,每个目标位置(在我们的示例中为bin \ release \ netcoreapp2.1 \ publish \ profile-name )包含完整的文件集(包括应用程序文件和all)。 NET Core文件)来启动您的应用。

我已经将发布目录设置为目标位置,所以win-x64来自哪里?它是否具有运行该应用程序或安装某物所需的最少文件?当我尝试在win-x64目录中运行.exe文件时,控制台应用程序似乎可以正常运行。我试图弄清楚是否需要使用发布目录或win-x64目录的内容。我一直在在线搜索docs网站和其他网站,但找不到关于为什么要创建两个输出目录的任何明确解释。有一个明显的大小差异,所以如果我能摆脱使用win-x64的困扰,那就太好了。我只是不确定这是否是正确的目录。

1 个答案:

答案 0 :(得分:0)

如果要进行自包含部署,则需要使用发布目录的内容。 win-x64文件夹是publish目录的子集,包含非.Net Core运行时文件(主要是与您的代码有关的文件)。

自包含部署的目的是控制应用程序的.net核心运行时,而不是依赖目标计算机上的运行时。如果选择win-x64运行时,并使其selfcontained = false,则会看到没有生成 exe