2010-11-27 10 views
52

私はVisual StudioのPublishボタンを使用してWebサイトを展開し、サーバーに別のApp_Dataフォルダが必要です。 Leave extra files on destination (do not delete)のチェックボックスがあり、私のApp_Dataフォルダが削除されないようにしていますが、ウェブサイトの変更に伴って多くの残存ファイルが蓄積されます。MSDeploy(Visual Studio)でApp_Dataフォルダを削除しないでください。その他のものはすべて削除してください。

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

答えて

84

手動場合msdeployを呼び出すときに行うことができます - ちょうど次のパラメータを追加します。

-skip:Directory=\\App_Data 

Web Deploy Operation Settingsを参照してください。パスは正規表現なので、非常に柔軟です。

VS生成のProjectName.deploy.cmdスクリプトを使用して展開する場合は、(スクリプトを実行しているときに)_MsDeployAdditionalFlags環境変数でこのパラメータを渡すこともできます。

これは私のニーズに合った最高のものです(あなたと同様の状況があります)。コマンドラインからデプロイしているので、私はVSのPublishボタンとの統合を試していません。

EDIT:

私はこの回答を投稿、私は、私は今それを更新しようと思いましたので、私は場合msdeployについていくつかのことを学びました。

まず、上記のスキップルールは、一致するパス(App_Data)のすべての操作をスキップします。より詳細な制御が必要な場合は、より冗長な構文を使用できます。たとえば、唯一の削除をスキップする(ターゲット・サーバー上の任意の余分なファイルを保つために、しかし、新しいものを追加して更新し、既存のもの):

-skip:skipaction='Delete',objectname='filePath',absolutepath='\\App_Data\\.*' -skip:skipaction='Delete',objectname='dirPath',absolutepath='\\App_Data\\.*' 

これは(そのすべてのコンテンツを含む)すべてのファイルとすべてのサブフォルダの削除をスキップApp_Dataには追加されませんが、追加や更新はできません。

もう1つの便利なことは、パッケージと共に生成された.deploy.cmdスクリプトに自動的に含まれるように、スキップルールをプロジェクトファイル(.csproj)で定義できることです。これにより、_MsDeployAdditionalFlagsを通じてスクリプトに渡す必要はありません。 ; $(_Escaped_PackageTempDir)が必要おそらくことになっているが、実際には

<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は完全に任意であり、次はcsprojファイルに含まれている場合は、上記のスキップルールが追加されます

私はいつもそれが空の文字列に評価されるのを見た)

詳細については、Web Deploy: Customizing a deployment packageHow to set MSDeploy settings in .csproj fileを参照してください。

警告:これは、.deploy.cmdスクリプトにこれらのルールを追加するだけなので、そのスクリプトを使用しないため、グラフィカルなIISマネージャをパッケージ展開に使用すると無駄になります。 VS、しかし私はチェックしていない)。

+0

ニース、ありがとう。 –

+0

恐ろしい!私はそのMSのページに行って、それを見つけられませんでした。 –

+9

Visual Studioの "Publish"機能を使用してデプロイメントを行うには、 'OnBeforePackageUsingManifest'の代わりに' AfterAddIisSettingAndFileContentsToSourceManifest'を使用する必要があります。コメントを参照してくださいhttp://blog.alanta.nl/2011/02/web-deploy-customizing-deployment.html?showComment=1314013105475#c1406362862563428999 –

1

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

+1

私はこれを試しましたが、動作しません。それでも公開時にフォルダを削除しようとしています – amhed

+0

こんにちは私はslowcheetahを使用すると、exludefilesfromdeploymentを置いてもファイルを削除しません。 –

0

私の経験から、MsDeploySkipRulesは、コマンドラインからデプロイするときにのみ実行されます。

Visual StudioからAzure(または別のWeb配置方法を使用)に公開する場合は、公開時に次の設定を行うことができます。

  • は、それはあなたが展開されたファイルやフォルダ間の比較を行います、チェックされている
  • は「先に追加のファイルを削除し、」

App_Dataフォルダからファイルを除外先で追加のファイルを削除しますサーバー上のものとがあります。

ユーザー生成コンテンツがある場合は、問題が発生する可能性があります。アップロードします。しかし、これは、これらのフォルダを別の場所に保存することで回避できます。 S3/Azureストレージ。

Web Publishing Profile