我使用Visual Studio的Publish
按鈕來部署自己的網站,並希望在服務器上不同的App_Data文件夾。 Leave extra files on destination (do not delete)
有一個複選框,可以防止我的App_Data文件夾被刪除,但隨着網站更改,它最終會累積很多殘留文件。讓MSDeploy(Visual Studio中)不會刪除App_Data文件夾,但刪除一切
有沒有什麼辦法讓它只排除App_Data文件時,它會刪除一切嗎?
我使用Visual Studio的Publish
按鈕來部署自己的網站,並希望在服務器上不同的App_Data文件夾。 Leave extra files on destination (do not delete)
有一個複選框,可以防止我的App_Data文件夾被刪除,但隨着網站更改,它最終會累積很多殘留文件。讓MSDeploy(Visual Studio中)不會刪除App_Data文件夾,但刪除一切
有沒有什麼辦法讓它只排除App_Data文件時,它會刪除一切嗎?
它可以當你手動調用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>
(名稱AddCustomSkipRules
和SkipDeleteAppData
完全是任意的; $(_Escaped_PackageTempDir)
應該是可能需要的,但在實踐中:
上述跳躍規則將如果被包括在csproj
文件中的以下添加我一直看到它評估爲一個空字符串)
請參閱Web Deploy: Customizing a deployment package和How to set MSDeploy settings in .csproj file欲瞭解更多信息。
需要注意的是:這隻會將這些規則添加到.deploy.cmd
腳本中,所以如果您想使用圖形化IIS管理器進行軟件包部署,因爲它不使用該腳本(這同樣適用於部署VS,但我沒有檢查)。
你有沒有看着封裝/發佈Web項目的設置,因爲你可以告訴它在App_Data文件夾中的文件exlude。
尼斯,感謝。 – 2011-04-14 09:58:30
太棒了!我甚至去過那個MS頁面,但沒有找到它。 – 2011-12-22 16:31:27