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>

(名稱AddCustomSkipRulesSkipDeleteAppData完全是任意的;應該可能需要$(_Escaped_PackageTempDir) ,但實際上我總是看到它評估為空字符串)

有關詳細信息,請參閱Web部署:自定義部署包如何在.csproj文件中設置MSDeploy設置

需要注意的是:這只會將這些規則添加到.deploy.cmd腳本中,因此如果要使用圖形化IIS管理器進行軟件包部署,它就沒用了,因為它不使用該腳本(從VS部署可能也是如此) ,但我沒有檢查過)。


您是否在項目設置中查看了Package / Publish Web,因為您可以告訴它在App_Data文件夾中排除文件。





msdeploy