2010-11-27 63 views
52

我使用Visual Studio的Publish按鈕來部署自己的網站,並希望在服務器上不同的App_Data文件夾。 Leave extra files on destination (do not delete)有一個複選框,可以防止我的App_Data文件夾被刪除,但隨着網站更改,它最終會累積很多殘留文件。讓MSDeploy(Visual Studio中)不會刪除App_Data文件夾,但刪除一切

有沒有什麼辦法讓它只排除App_Data文件時,它會刪除一切嗎?

回答

84

它可以當你手動調用msdeploy做 - 只需添加下列參數:

-skip:Directory=\\App_Data 

Web Deploy Operation Settings。路徑是一個正則表達式,所以它非常靈活。

如果使用VS生成的ProjectName.deploy.cmd腳本進行部署,則還可以在_MsDeployAdditionalFlags環境變量(運行該腳本時)中傳遞此參數。

這是我想出來的滿足我們需要的最好的(我們有類似的情況,你)。我沒有嘗試將它與VS的Publish按鈕集成,因爲我們從命令行進行部署。

編輯:

,因爲我張貼了這個答案,所以我想我現在想更新它,我已經瞭解MSDeploy幾件事情。

首先,上述的跳躍規則跳過匹配路徑(App_Data文件)上的任何操作。如果需要更細化的控制,則可以使用更詳細的語法。例如,只跳過刪除(保持在目標服務器上的任何其他文件,但添加任何新的和更新現有的):

-skip:skipaction='Delete',objectname='filePath',absolutepath='\\App_Data\\.*' -skip:skipaction='Delete',objectname='dirPath',absolutepath='\\App_Data\\.*' 

此跳過所有文件和所有子文件夾的刪除(與他們的所有內容)在App_Data中,但不阻止添加和更新。

另一個有用的事情是可以在項目文件(.csproj)中定義跳過規則,以便它們自動包含在與包一起生成的.deploy.cmd腳本中。這使得不需要通過_MsDeployAdditionalFlags將它們傳遞給腳本。

<PropertyGroup> 
    <OnBeforePackageUsingManifest>AddCustomSkipRules</OnBeforePackageUsingManifest> 
</PropertyGroup> 
<Target Name="AddCustomSkipRules"> 
    <ItemGroup> 
    <MsDeploySkipRules Include="SkipDeleteAppData"> 
     <SkipAction>Delete</SkipAction> 
     <ObjectName>filePath</ObjectName> 
     <AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data\\.*</AbsolutePath> 
     <XPath> 
     </XPath> 
    </MsDeploySkipRules> 
    <MsDeploySkipRules Include="SkipDeleteAppData"> 
     <SkipAction>Delete</SkipAction> 
     <ObjectName>dirPath</ObjectName> 
     <AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data\\.*</AbsolutePath> 
     <XPath> 
     </XPath> 
    </MsDeploySkipRules> 
    </ItemGroup> 
</Target> 

(名稱AddCustomSkipRulesSkipDeleteAppData完全是任意的; $(_Escaped_PackageTempDir)應該是可能需要的,但在實踐中:

上述跳躍規則將如果被包括在csproj文件中的以下添加我一直看到它評估爲一個空字符串)

請參閱Web Deploy: Customizing a deployment packageHow to set MSDeploy settings in .csproj file欲瞭解更多信息。

需要注意的是:這隻會將這些規則添加到.deploy.cmd腳本中,所以如果您想使用圖形化IIS管理器進行軟件包部署,因爲它不使用該腳本(這同樣適用於部署VS,但我沒有檢查)。

+0

尼斯,感謝。 – 2011-04-14 09:58:30

+0

太棒了!我甚至去過那個MS頁面,但沒有找到它。 – 2011-12-22 16:31:27

1

你有沒有看着封裝/發佈Web項目的設置,因爲你可以告訴它在App_Data文件夾中的文件exlude。

0

根據我的經驗,MsDeploySkipRules僅在從命令行部署時才運行。

如果從Visual Studio發佈到Azure(或使用其他Web Deploy方法),則可以在發佈時設置以下內容。

  • 目的地刪除其他文件
  • 從App_Data文件夾

當「目的地刪除其他文件」排除文件被選中,它會使你部署的文件和文件夾之間的比較和服務器上的。

被警告,如果您有用戶生成的內容,您可能會遇到問題。上傳。但是,這可以通過將這些文件夾存儲在不同位置來解決,例如, S3/Azure存儲。

Web Publishing Profile