[英]Non-Azure Deployment through VS 2015 RC
我正在嘗試在VS 2015 Enterprise RC上使用ASP.NET 5及其所有新功能。 為了確保順利的端到端部署,我嘗試通過VS Publish功能將應用程序部署到非Azure私有服務器。
但是,我錯過了一個非常重要的功能:發布到非Azure服務器的能力。
在早期版本的Visual Studio中(我使用的是VS 2013),自定義選項就在那里。
我嘗試過修改項目屬性,但沒有嘗試如何將我的ASP.NET 5應用程序部署到自定義服務器。 有任何想法嗎?
它是可行的(畢竟,發布到Azure網站也在內部使用WebDeploy),但它現在有點棘手,需要你調整一些東西。 這是你可以做的(對於VS 2015 CTP6):
Asp.net vnext的目錄結構與常規的Asp.net應用程序略有不同。 這兩個主要目錄是: approot
和wwwroot
(如果將應用程序部署到本地文件系統,則可以瀏覽它們)。 我們想要部署這兩個目錄,但IIS網站路徑必須指向wwwroot
目錄。 這個問題似乎在Web Deploy 3.6中得到解決,但我只是手動處理它。 為此,您可以在IIS中創建兩個網站/應用程序:
mysite-deploy
。 wwwroot
目錄。 我將其命名為mysite
。 YourprojectDir\\Properties\\PublishProfiles
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>
mysite-deploy
)。 Web Publish Activity
窗口中檢查進度。 開箱即用,發布可能會失敗。 現在它變得棘手:)
起初,我得到的是這個錯誤:
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
窗口,然后在“ Settings
選項卡上選中“ Publish using Powershell script
Settings
選項。 再試一次。
如果出現錯誤: ERROR_CERTIFICATE_VALIDATION_FAILED
,則表示您的計算機不信任目標計算機上的IIS Management Service
的SSL證書。 您可以嘗試下載證書,將其添加到受信任的證書存儲區,也可以完全禁用證書驗證。
在后一種情況下,您需要編輯位於C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\IDE\\Extensions\\Microsoft\\Web Tools\\Publish\\Scripts\\1.0.0-pre\\publish-module.psm1
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'
檢查正在調用的確切命令行 - 在Web Publish Activity Window
中應該記錄一行,從Calling msdeploy with the command:
開始Calling msdeploy with the command:
。 尋找ComputerName=
。 如果它看起來像這樣: ComputerName='https://https://myhost:8172/msdeploy.axd'
msdeploy.axd' , then you should change
field in Publish profile
連接tab to:
服務器field in Publish profile
, then you should change
tab to:
myhost:8172 . That's because the powershell script automatically adds
. That's because the powershell script automatically adds
https:// and
/ msdeploy.axd`。
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'
這似乎是Web Deploy 3.6的一個特性,但似乎服務器端也必須支持它。 要禁用它,只需注釋掉這一行。 警告:此更改可能會影響到Azure網站的PowerShell部署 。
現在您的站點正在部署,還有一件事。 我們希望部署approot
和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
的父級,這正是我們所需要的。 在再次發布之前,您可能希望清除服務器上的站點目錄 - 現在發布的目錄結構將不同。
此時,應該在服務器上部署並提供該站點。 在服務器端,您應該看到兩個目錄: approot
和wwwroot
以及一些腳本文件。
您必須自己調試任何服務器端錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.