VSTS 雲到地的 CI CD (08) - 排除更新特定資料夾或檔案

今天佈署時有個需求

請不要把站台上的 App_Data 和某些 Folder 清除掉

我的第一個疑問是我並沒有在佈署去多做什麼額外的清除設定怎麼可能會砍掉呢 ?

於是就開始一連串的實驗

由於什麼都不調整的狀況下

站台內確定會把 App_Data 資料夾給移除掉所以就不再特地去重現了

Visual Studio IDE 中的單鍵發行記得有個選項是排除 App_Data Folder 

實驗勾選 Exclude files from the App_Data folder

佈署目標站台後 App_Data Folder 還是被移除

所以這個方式是無法達成需求的

這個方式不行於是把腦筋給動到 .csproj

把「更新排除特定資料夾」這件事情定義在 .csproj 的作法我認為不是個好選擇

但是目前我還沒想到其他方式可以做到這個需求

懇請其他大神提供更好的方式

調整 .csproj

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
	<OnBeforePackageUsingManifest>AddSkipRules</OnBeforePackageUsingManifest>
  </PropertyGroup>
  <Target Name="AddSkipRules">
    <ItemGroup>
      <MsDeploySkipRules Include="SkipAppDataDirOnDeploy">
        <SkipAction>Delete</SkipAction>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data</AbsolutePath>
        <XPath></XPath>
      </MsDeploySkipRules>
	  <MsDeploySkipRules Include="SkipGeneratedFilesDirOnDeploy">
        <SkipAction>Delete</SkipAction>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>$(_Escaped_PackageTempDir)\\GeneratedFiles</AbsolutePath>
        <XPath></XPath>
      </MsDeploySkipRules>
    </ItemGroup>
  </Target>
</Project>

排除掉「App_Data」與「GeneratedFiles」

Run 完的結果是成功的

相關連結

c# - How to set MSDeploy settings in .csproj file - Stack Overflow

Alanta Developer Notes: Web Deploy : Customizing a deployment package

Web Deploy Operation Settings

asp.net - Make MSDeploy (Visual Studio) not delete App_Data folder but delete everything else - Stack Overflow