通过 VS 2015 RC 进行非 Azure 部署

2023-11-21

I'm trying out ASP.NET 5 and all its new features on VS 2015 Enterprise RC. To ensure smooth end-to-end deployment, I then try to deploy the application to a non-Azure private server through VS Publish feature. VS 2015 RC Publish Option

However, I'm missing out a very important feature: the ability to publish to a non-Azure server. VS 2015 RC Publish

在 Visual Studio 的早期版本(我使用的是 VS 2013)中,存在“自定义”选项。

Custom publish option

我尝试修改项目属性,但没有了解如何将 ASP.NET 5 应用程序部署到自定义服务器。有任何想法吗?


这是可行的(毕竟,发布到 Azure 网站也在内部使用 WebDeploy),但现在有点棘手,需要您调整一些东西。 您可以执行以下操作(对于 VS 2015 CTP6):

准备

Asp.net vnext 的目录结构与常规 Asp.net 应用程序略有不同。有两个主要目录:approot and wwwroot(如果您将应用程序部署到本地文件系统,则可以浏览它们)。我们想要部署这两个目录,但 IIS 网站路径必须指向wwwroot目录。这个问题似乎在网络部署 3.6,但我只会手动处理它。为此,您可以在 IIS 中创建两个网站/应用程序:

  • 一个指向根应用程序目录并且仅用于部署的目录。我将命名它mysite-deploy.
  • 一个将用于实际托管我们的网站并将指向wwwroot目录。我简单地命名一下mysite.

部署

  1. Go to YourprojectDir\Properties\PublishProfiles
  2. 创建一个空的 pubxml 文件(即mysite.pubxml)

将以下内容粘贴到您的 pubxml 中:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>MSDeploy</WebPublishMethod>
    <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>    
  </PropertyGroup>
</Project>
  1. 当您在 Visual Studio 中按“发布”时,您应该会在列表中看到这个新的配置文件。
  2. 像平常一样填写“连接”选项卡(设置服务器、站点名称等)。请记住将站点名称设置为部署站点(mysite-deploy).
  3. 验证连接
  4. 尝试预览选项卡 - 它很可能不起作用,但如果它起作用 - 你就完成了。
  5. 点击发布
  6. 检查进度Web Publish Activity window.

可能的错误

开箱即用,发布可能会失败。现在事情变得棘手了:)

ERROR_FAILED_TO_DESERIALIZE

首先,我得到的是这个错误:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.AspNet.Publishing.targets(205,5): Error ERROR_FAILED_TO_DESERIALIZE: Web deployment task failed. ()
Publish failed to deploy.

让我们尝试解决这个问题。

打开Publish再次窗口,并检查Publish using Powershell script上的选项Settings标签。 再试一次。

错误_证书_验证_失败

如果出现错误:ERROR_CERTIFICATE_VALIDATION_FAILED,这意味着 SSL 证书IIS Management Service您的计算机不信任您的目标计算机上的。您可以尝试下载证书并将其添加到受信任的证书存储中,或者您可以完全禁用证书验证。

在后一种情况下,您需要编辑publish-module.psm1位于C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\Publish\Scripts\1.0.0-pre\publish-module.psm1。找到片段:

        # add excludes
        $sharedArgs.ExtraArgs += (GetInternal-ExcludeFilesArg -publishProperties $publishProperties)
        # add replacements
        $sharedArgs.ExtraArgs += (GetInternal-ReplacementsMSDeployArgs -publishProperties $publishProperties)

并添加以下内容:

$sharedArgs.ExtraArgs += '-allowUntrusted'

ERROR_COULD_NOT_CONNECT_TO_REMOTESVC

检查正在调用的确切命令行 - inWeb Publish Activity Window应该记录一行,以Calling msdeploy with the command:。寻找ComputerName=。如果它看起来像这样:ComputerName='https://https://myhost:8172/msdeploy.axd'/msdeploy.axd', then you should changeServerfield in Publish profile联系tab to:我的主机:8172. That's because the powershell script automatically addshttps://and/msdeploy.axd`。

ERROR_PROVIDER_NOT_FOUND

More Information: The provider 'contentPathLib' could not be found.  Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_PROVIDER_NOT_FOUND.

再去一次C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\Publish\Scripts\1.0.0-pre\publish-module.psm1并找到该行:

$publishArgs += '-enableLink:contentLibExtension'

这似乎是一个特点网络部署 3.6,但似乎服务器端也必须支持它。要禁用它,只需注释掉这一行即可。警告:此更改可能会影响 Azure 网站的 powershell 部署.

仅部署 wwwroot 目录的内容

现在您的站点已经部署完毕,还有一件事。我们想要部署approot and wwwroot目录,而只是内容wwwroot目录已部署。为了解决这个问题,我们需要再次编辑C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\Publish\Scripts\1.0.0-pre\publish-module.psm1.

找到这样一行:

$webrootOutputFolder = (get-item (Join-Path $packOutput $webroot)).FullName

之后,添加一个新行:

$webrootOutputFolder = $webrootOutputFolder | split-path -parent

这会将已发布的文件夹设置为父文件夹wwwroot,这正是我们所需要的。在再次发布之前,您可能需要清除服务器上站点的目录 - 现在发布的目录结构将有所不同。

Testing

此时,该站点应该已部署并在服务器上可用。在服务器端,您应该看到两个目录:approot and wwwroot也许还有一些脚本文件。

您必须自行调试任何服务器端错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 VS 2015 RC 进行非 Azure 部署 的相关文章

随机推荐