Visual Studio のPublish
ボタンを使用して Web サイトを展開していますが、サーバーに別の App_Data フォルダーが必要です。Leave extra files on destination (do not delete)
App_Data フォルダーが削除されないようにするチェックボックスがありますが、Web サイトが変更されると、最終的に多くの痕跡ファイルが蓄積されます。
すべてを削除するときに App_Data だけを除外する方法はありますか?
Visual Studio のPublish
ボタンを使用して Web サイトを展開していますが、サーバーに別の App_Data フォルダーが必要です。Leave extra files on destination (do not delete)
App_Data フォルダーが削除されないようにするチェックボックスがありますが、Web サイトが変更されると、最終的に多くの痕跡ファイルが蓄積されます。
すべてを削除するときに 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 内のすべてのファイルとすべてのサブフォルダー (およびそのすべてのコンテンツ) の削除がスキップされますが、追加と更新は妨げられません。
もう 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>
(名前AddCustomSkipRules
とSkipDeleteAppData
は完全に任意です。必要$(_Escaped_PackageTempDir)
になる可能性がありますが、実際には、空の文字列に評価されるのを常に見てきました)
詳細については、「 Web 配置: 配置パッケージのカスタマイズ」および「.csproj ファイルで MSDeploy 設定を設定する方法」を参照してください。
1 つの注意点: これはこれらのルールを.deploy.cmd
スクリプトに追加するだけなので、パッケージの展開にグラフィカル IIS マネージャーを使用する場合は、そのスクリプトを使用しないため役に立ちません (おそらく VS からの展開にも同じことが言えますが、私はチェックしていません)。
App_Data フォルダー内のファイルを除外するように指示できるため、プロジェクト設定で Package/Publish Web を見ましたか。