asp.net - win7 - windows server 2008 r2 web deploy
使MSDeploy(Visual Studio)不刪除App_Data文件夾,但刪除其他所有內容 (2)
我正在使用Visual Studio的“ Publish
按鈕來部署我的網站,並希望在服務器上使用不同的App_Data文件夾。 有一個複選框,用於Leave extra files on destination (do not delete)
,這會阻止我的App_Data文件夾被刪除,但隨後它會在網站更改時積累大量的遺留文件。
有沒有辦法讓它在刪除所有東西時只排除App_Data?
可以在手動調用msdeploy時完成 - 只需添加以下參數:
-skip:Directory=\\App_Data
請參閱Web部署操作設置 。 路徑是正則表達式,因此非常靈活。
如果使用VS生成的ProjectName.deploy.cmd腳本進行部署,則還可以在_MsDeployAdditionalFlags環境變量中傳遞此參數(運行該腳本時)。
這是我為我們的需求提出的最好的(我們有與你類似的情況)。 我沒有嘗試將它與VS的發布按鈕集成,因為我們是從命令行部署的。
編輯:
自從我發布這個答案以來,我已經學到了一些關於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將它們傳遞給腳本。
如果csproj
文件中包含以下內容, csproj
添加上述跳過規則:
<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)
,但實際上我總是看到它評估為空字符串)
有關詳細信息,請參閱Web部署:自定義部署包和如何在.csproj文件中設置MSDeploy設置 。
需要注意的是:這只會將這些規則添加到.deploy.cmd
腳本中,因此如果要使用圖形化IIS管理器進行軟件包部署,它就沒用了,因為它不使用該腳本(從VS部署可能也是如此) ,但我沒有檢查過)。
您是否在項目設置中查看了Package / Publish Web,因為您可以告訴它在App_Data文件夾中排除文件。