4

同期を使用するときに、 MSDeployが他のフォルダー内の特定のフォルダーとファイルタイプをスキップするようにします。現在、CCNetを使用してsync動詞を使用してMSDeployを呼び出し、Webサイトをビルドからステージングサーバーに移動しています。アプリケーションやユーザーがアップロードしたファイルなどによって作成されたファイルが宛先にあるため、宛先で削除されないように特定のフォルダーを除外する必要があります。また、宛先に残す必要があるサイトによって作成されたマニフェストファイルがあります。

現時点では使用-enableRule:DoNotDeleteRuleしていますが、宛先に古いファイルが残っています。

<exec>
    <executable>$(MsDeploy)</executable>
    <baseDirectory>$(ProjectsDirectory)$(projectName)$(ProjectsWorkingDirectory)\Website\</baseDirectory>
    <buildArgs>-verb:sync 
        -source:iisApp="$(ProjectsDirectory)$(projectName)$(ProjectsWorkingDirectory)\Website\" 
        -dest:iisApp="$(website)/$(websiteFolder)"
        -enableRule:DoNotDeleteRule</buildArgs>
    <buildTimeoutSeconds>600</buildTimeoutSeconds>
    <successExitCodes>0,1,2</successExitCodes>
</exec>

スキップ操作を使用しようとしましたが、問題が発生しました。最初にDoNotDeleteRuleを削除し、(複数の)スキップに置き換えました

<exec>
    <executable>$(MsDeploy)</executable
    <baseDirectory>$(ProjectsDirectory)$(projectName)$(ProjectsWorkingDirectory)\Website\</baseDirectory>
    <buildArgs>-verb:sync 
        -source:iisApp="$(ProjectsDirectory)$(projectName)$(ProjectsWorkingDirectory)\Website\" 
        -dest:iisApp="$(website)/$(websiteFolder)"
        -skip:objectName=dirPath,absolutePath="assets" 
        -skip:objectName=dirPath,absolutePath="survey" 
        -skip:objectName=dirPath,absolutePath="completion/custom/complete*.aspx" 
        -skip:objectName=dirPath,absolutePath="completion/custom/surveylist*.manifest" 
        -skip:objectName=dirPath,absolutePath="content/scorecardsupport" 
        -skip:objectName=dirPath,absolutePath="Desktop/docs" 
        -skip:objectName=dirPath,absolutePath="_TempImageFiles"</buildArgs>         
    <buildTimeoutSeconds>600</buildTimeoutSeconds>
    <successExitCodes>0,1,2</successExitCodes>
</exec>

しかし、これは次の結果になります。


エラー:ソース(iisApp)と宛先(contentPath)は、指定された操作と互換性がありません。
エラーカウント:1。

そこで、iisAppからcontentPathに変更し、dirPathの代わりにabsolutePathを次のようにディレクトリに変更しました。

<exec>
    <executable>$(MsDeploy)</executable
    <baseDirectory>$(ProjectsDirectory)$(projectName)$(ProjectsWorkingDirectory)\Website\</baseDirectory>
    <buildArgs>-verb:sync 
        -source:contentPath="$(ProjectsDirectory)$(projectName)$(ProjectsWorkingDirectory)\Website\" 
        -dest:contentPath="$(website)/$(websiteFolder)"
        -skip:Directory="assets" 
        -skip:Directory="survey" 
        -skip:Directory="content/scorecardsupport" 
        -skip:Directory="Desktop/docs" 
        -skip:Directory="_TempImageFiles"</buildArgs>           
    <buildTimeoutSeconds>600</buildTimeoutSeconds>
    <successExitCodes>0,1,2</successExitCodes>
</exec>

そしてこれは私にエラーを与えます:パスの不正な文字:

<buildresults>
情報:MSDeploy.contentPath(MSDeploy.contentPath)を追加します。
情報:contentPathを追加しています(C:\ WWWRoot \ MySite
-skip:Directory = Assets
-skip :Directory =
Survey -skip:Directory = content / scorecardsupport
-skip:Directory = Desktop / docs
-skip:Directory = _TempImageFiles)。
情報:dirPathを追加しています(C:\ WWWRoot \ MySite
-skip:Directory = Assets
-skip :Directory =
Survey -skip:Directory = content / scorecardsupport
-skip:Directory = Desktop / docs
-skip:Directory = _TempImageFiles)。
</ buildresults>

<buildresults>
エラー:パスに不正な文字が含まれています。
エラー数:1。
</ buildresults>

したがって、参照されるフォルダーの内容が同期で削除されないように、また完了/カスタムフォルダー内の*.manifestファイルと*.aspxファイルもスキップされるように、このタスクを構成する方法を知る必要があります。

4

2 に答える 2

5

これに関する問題は...改行です!ここで、各-skipディレクティブを、パスに不正な文字を引き起こしていた新しい行に分割しました。すべてのスキップディレクティブをインラインで実行すると、これが解決されました。

<exec>
  <executable>$(MsDeploy)</executable>
  <baseDirectory>$(ProjectsDirectory)$(projectName)$(ProjectsWorkingDirectory)\Website\</baseDirectory>
  <buildArgs>-verb:sync 
            -source:contentPath="$(ProjectsDirectory)$(projectName)$(ProjectsWorkingDirectory)\Website\" 
            -dest:contentPath="C:\WWWRoot\$(websiteFolder)" -skip:Directory="assets" -skip:Directory="_TempImageFiles" -skip:objectName=dirPath,absolutePath="\\Desktop\\Docs"
  </buildArgs>          
  <buildTimeoutSeconds>600</buildTimeoutSeconds>
  <successExitCodes>0,1,2</successExitCodes>
</exec>
于 2012-06-26T13:57:38.797 に答える
1

このMSDNの記事「WebDeployment:Exclusive Files and Folders via theWebApplication'sProjectFile」をご覧ください。具体的には、「特定のファイル/フォルダの除外」セクションです。これにより、ディレクトリ、ファイル、およびファイル/ディレクトリパターンの一致が、展開パッケージにコンテンツとして含まれることと、展開時に宛先で無視されることの両方が停止します。

しかし、私は一歩下がって、そもそもなぜこれらのファイルがWebプロジェクトに存在するのかを尋ねます。IISでユーザーがアップロードしたコンテンツを処理する方法は、Webアプリケーションに仮想ディレクトリを追加することです。Webデプロイパッケージで同期を実行する場合、仮想ディレクトリの内容(およびvdir自体のプロビジョニング)は無視されます。これにより、クライアントコンテンツディレクトリを好きな場所でホストできるという利点も得られます。これには、多くの利点があります(つまり、ディスクドライブが大きい、ハードディスクをガベージデータで埋めようとする悪意のあるユーザーによるサービス拒否の防止など)。

于 2012-06-24T03:10:13.403 に答える