57

Visual Studio のPublishボタンを使用して Web サイトを展開していますが、サーバーに別の App_Data フォルダーが必要です。Leave extra files on destination (do not delete)App_Data フォルダーが削除されないようにするチェックボックスがありますが、Web サイトが変更されると、最終的に多くの痕跡ファイルが蓄積されます。

すべてを削除するときに App_Data だけを除外する方法はありますか?

4

7 に答える 7

101

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 内のすべてのファイルとすべてのサブフォルダー (およびそのすべてのコンテンツ) の削除がスキップされますが、追加と更新は妨げられません。

もう 1 つの便利な点は、プロジェクト ファイル ( ) でスキップ ルールを定義して、パッケージと共に生成されるスクリプト.csprojに自動的に含めることができることです。.deploy.cmdこれにより、_MsDeployAdditionalFlags を介してそれらをスクリプトに渡す必要がなくなります。

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 設定を設定する方法」を参照してください。

1 つの注意点: これはこれらのルールを.deploy.cmdスクリプトに追加するだけなので、パッケージの展開にグラフィカル IIS マネージャーを使用する場合は、そのスクリプトを使用しないため役に立ちません (おそらく VS からの展開にも同じことが言えますが、私はチェックしていません)。

于 2011-04-14T06:24:11.650 に答える
1

App_Data フォルダー内のファイルを除外するように指示できるため、プロジェクト設定で Package/Publish Web を見ましたか。

于 2011-10-20T18:06:12.630 に答える