如何从Visual Studio 2015(+ U1)ASP.NET Core发布到Windows Server 2012R2上的IIS?

时间:2016-01-06 19:20:49

标签: visual-studio-2015 asp.net-core

这个问题可以被认为是两年前的一个更新,询问如何从Visual Studio 2015中的开放式ASP.NET核心解决方案(then called ASP.net vnext,简称为ASP.NET 5)发布到另一个我的本地网络上的机器,它上面部署了IIS,应该用于运行DNX运行时和我正在编写的ASP.NET应用程序。由于该向导对我没有任何帮助,我相信我必须完全手动配置MSDEPLOY解决方案及其配置文件,或其他等效的文件。

自那个原始问题以来,情况发生了很大变化,所以我要求使用ASP.NET 5和DNX 1.0 RC1。

有一些related其他questions询问如何执行此操作并提及WebDeploy 3.6,并且还指的是近2年的beta版本。

因此,我相信,对于Visual Studio 2015,这个问题应该有一个新的和不同的答案,现在ASP.NET 5处于候选版本并且功能完整。现在怎么办?

此外,我应该说清楚我不是在谈论从我C:\DEV\WORKINGCOPY上的Visual Studio解决方案部署到我自己的机器c:\inetpub\wwwroot,而是在网络上复制,通过web-dav或FTP或SMB共享,​​运行到IIS的Windows服务器框。

到目前为止我尝试过:

  • 在文件系统模式下使用内置的发布到Web向导。结果似乎是你可以通过web.cmd运行的,它将执行dnx和kestrel,但是不会构建一个可以从Windows 8. 2012上的IIS 8.x运行的包。此外,发布到文件系统模式会创建一堆包括一组名为approot,logs和wwwroot的基本文件夹的东西,我很确定不应该将IIS设置为直接提供approot或logs文件夹。如果我从IIS查看我的wwwroot \文件夹副本,我看到500 - 内部服务器错误。这就是我不希望IIS做什么,因为它不知道如何在那里使用web.config并对它做任何事情。

  • 尝试在命令提示符下手动使用dnu publishdnu pack,并希望我可以使用结果来替换我的XYZ-publish.ps1 powershell文件的内容PublishProfiles 。 dnu publish命令失败," bower无法识别为内部或外部命令"。 dnu pack成功,但我不知道如何处理生成的.nupkg文件,以使它们在IIS上运行。

我的目标一般是:

  • 只需单击一下或键入一个命令即可完成所有操作,包括任何捆绑和构建任何预编译程序集(nuget包是与Contmblies inclassic .net相同的vNext等概念)。

  • 向自己和其他读者表明,在您准备部署之前,IIS上的任务一次是什么,以及每次单击发布时为您完成的任务,以及如何设置它们。

这似乎是一个基本领域,目前ASP.NET 5上的文档非常薄弱,并且该工具目前仅针对想要将软件包部署到文件夹并从&#34运行的人进行了优化。 ; dnx web" (kestrel),或者那些想要在Azure上部署的人(这个过程对于发布向导中的那些情况是完全自动化的)而不是那些想要部署到他们自己的运行IIS的机器的人。发布向导缺少这个非常明显(对我而言)的情况;发布到我自己的Windows服务器框,并创建我需要的任何IIS脚手架,以使其工作。

1 个答案:

答案 0 :(得分:2)

更新:Microsoft's Connect 2015 demo suite called Healthcare.biz包含基于PowerShell的部署方案(适用于azure),可能适用于本地IIS服务器。请参阅该GitHub存储库上的PublishAspNet5Website.ps1 powershell脚本。

这个问题有很多要素,我找不到任何一个可以识别它们的来源。

  1. 首先需要在IIS服务器上进行一些设置,根据this question,您必须选择将用于运行DNX / ASP.NET 5应用程序的应用程序池。您还应该创建一个虚拟文件夹,然后将其转换为应用程序。根据该链接的问题,您应该使用.NET 4池。 IIS服务器上的其他设置可能包括设置服务器端工具以接受来自visual studio(IDE内部)和msbuild命令行(持续集成服务器)部署工具的传入发布请求。

  2. 因为Visual Studio 2015中的向导(包括更新1中的向导)没有提供类似"部署到域中的Windows服务器"的选项,所以你必须学习现有选项,如文件模式部署选项和azure deploy选项,并根据这两个起点中的一个选择一些混合方法。您的资产包括PowerShell的所有功能,以及dnx / dnu工具的所有功能,包括其功能集成。您将根据需要捆绑/构建/编译,然后将结果发送到MSDEPLOY工具,然后您需要为其编写配置(.pubxml)文件。您还可以选择完全忽略DEPLOY命令,并选择通过" staging"您添加到dnx项目的动词,以部署到临时服务器。

  3. 为了有希望将微小的起始文件集修改为执行问题中指定的工作所需的条件,您可能必须阅读有关MSDEPLOY的文档。在互联网上搜索我发现有一些示例.pubxml文件here,并显示如何构造.pubxml。在部署配置文件文件夹中,您至少需要一个正确构造的.pubxml文件和另一个具有相同基本名称的文件,而扩展名为.ps1(powershell),无论您使用哪种技术,它都显示相同,所以它在我的视图中可以存在的唯一原因是你可以在PowerShell中完成其他任务。

  4. 示例.pubxml内容

    <?xml version="1.0" encoding="utf-8"?>
    <!--
     NOTE: I'm pretty sure that the publishprovider should NOT be the one shown here. 
     I do not know what it should be and will update this answer when I figure that fact out.
    -->
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <WebPublishMethod>MSDeploy</WebPublishMethod>
        <ADUsesOwinOrOpenIdConnect>False</ADUsesOwinOrOpenIdConnect>
        <PublishProvider>AzureWebSite</PublishProvider>
        <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
        <LastUsedPlatform>Any CPU</LastUsedPlatform>
        <SiteUrlToLaunchAfterPublish>http://ramsoftazurewebappdemo.azurewebsites.net</SiteUrlToLaunchAfterPublish>
        <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
        <ExcludeApp_Data>False</ExcludeApp_Data>
        <CompileSource>False</CompileSource>
        <_DefaultDNXVersion>dnx-clr-win-x86.1.0.0-rc1-update1</_DefaultDNXVersion>
        <UsePowerShell>True</UsePowerShell>
        <IISCommand>web</IISCommand>
        <WebRoot>wwwroot</WebRoot>
        <WwwRootOut>wwwroot</WwwRootOut>
        <IncludeSymbols>False</IncludeSymbols>
        <Native>False</Native>
        <IgnoreDNXRuntime>False</IgnoreDNXRuntime>
        <MSDeployServiceURL>myservername.mydomain.biz:443</MSDeployServiceURL>
        <DeployIisAppPath>MyWebAppPath</DeployIisAppPath>
        <RemoteSitePhysicalPath />
        <SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
        <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
        <EnableMSDeployBackup>True</EnableMSDeployBackup>
        <UserName>$USERNAME</UserName>
        <_SavePWD>True</_SavePWD>
        <_DestinationType>AzureWebSite</_DestinationType>
      </PropertyGroup>
    </Project>
    
    1. 从PowerShell ps1脚本直接熟悉MSDEPLOY可用的命令行选项(您可以自己调用),而不是使用.pubxml格式。以下是调用MSDEPLOY.EXE(在查找文档时也称为Microsoft Web Deploy V3)的示例:
    2.   "C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe" 
        -source:IisApp='C:\dev\PublishOut\YourWebApp\wwwroot
         -dest:IisApp='YourIisAppName',
           ComputerName='https://yourcomputername.yourdomain.biz/msdeploy.axd',
           UserName='$USERNAME',
           Password='secr3t',
           IncludeAcls='False',AuthType='Basic' 
         -verb:sync -enableLink:contentLibExtension  
         -enableRule:DoNotDeleteRule -retryAttempts:3
      
      1. 如果您还没有尝试过,请习惯vNext dot net utility(dnu)命令中的dnu packdnu publish选项。这就是捆绑ASP.NET源文件的方法,以及DNX运行时的副本,以便它可以在服务器端运行。对我来说,我无法使用dnu publish命令,它似乎是一个客户端资源发布阶段,默认情况下依赖于名为bower的node.js(javascript)工具,我发现我必须手动安装为Visual Studio 2015& #39; s asp.net 5模板依赖于这个工具但是默认情况下似乎没有安装它(也许我在安装visual studio时错过了一个选项,如果那是我的话,我会更新这个答案情况)。
      2. 随着更多细节汇集在一起​​,我将继续完善和扩展这个答案。我目前正在跟踪tutorials,仅讨论在部署到azure或商业互联网托管问题时如何执行此操作,我将尝试将它们调整为内部服务器,您还要负责IIS服务器的配置以及必须在IIS服务器上配置的任何发布代理软件。