2

サーバーにいくつかのファイルをデプロイしています。しかし、これを行っているとき、ビルドはその場所にあるすべてのファイルとフォルダーを削除しています。サーバーからすべてのファイルを削除したくありません。移動先フォルダから1つのフォルダ(フォルダ名はTemp)を除外したい。一時フォルダーは、他のファイルを削除しているときに削除されるべきではありません。どうやってするか?

これがTFSビルド定義です

<PropertyGroup Condition=" '$(DeployEnvironment)' == 'Dev' "> 
<DeployPath>\\server1\D$\temp\reports</DeployPath> 
</PropertyGroup> 
<Target Name="CoreCompileSolution" /> 
<Target Name="AfterCompile"> 
   <Message Importance ="high" Text="Solution Root: $(SolutionRoot)" />
   <Message Importance ="high" Text="Out Dir: $(OutDir)" />
   <Copy SourceFiles="@(RPTFiles)" DestinationFolder="$(OutDir)_PublishedWebsites\Reports\" /> 
 </Target>
<Target Name="AfterDropBuild" > 
  <CreateItem Exclude="$(DeployPath)\Temp*.*"> 
      <Output ItemName="PreviousDeployment" TaskParameter="Include" /> 
  </CreateItem>
</Target>
4

1 に答える 1

1

なぜコピー タスクを使用しているのですか? 展開ではなく、ビルド中のローカル操作に使用することを目的としていると思います (動作を簡単に構成する機会が得られないため)。

copy tsak の代わりに、次のオプションのいずれかを使用することをお勧めします

  • 非 Web アプリケーション- Robocopy: を使用: /XD dirs [dirs]...指定された名前/パスに一致するディレクトリを除外します。XF と XD は組み合わせて使用​​できます。

    ROBOCOPY c:\source d:\dest /XF *.doc *.xls /XD c:\unwanted /S 
    

    使用ガイドについては、このリンクを参照してください。コマンド ラインから (<Exec Command="" >タスクを使用して) 実行するか、適切なラッパーを備えたMBuiild Community Tasksprojectを使用します。

  • Web アプリケーション:展開にはWeb Deployを使用する必要があります。MSBuild 統合を使用します (VS 2010 以降。VS2010 でのセットアップと構成に関するガイダンスについては、このブログ シリーズを参照してください。注: VS 2012 では大幅に簡素化されていますが、現時点で共有するリンクはありません)。コマンドラインから実行します (VS 2010 より前):

    <Exec Command="&quot;$(WebDeployToolPath)&quot; -verb:sync - source:dirPath='$(MSBuildProjectDirectory)\Published\' -dest:dirPath='$(DeployDirectoryLocalPath)',computerName=$(DeployTargetURL),userName='$(DeployUserName)',password='$(Password)',authType='Basic' -skip:skipaction='Delete',objectname='filePath',absolutepath='app_offline.htm' -skip:skipaction='Delete',objectname='filePath',absolutepath='logs\\.*' -skip:skipaction='Delete',objectname='dirPath',absolutepath='logs\\.*' -skip:skipaction='Delete',objectname='filePath',absolutepath='UserFiles\\.*' -skip:skipaction='Delete',objectname='dirPath',absolutepath='UserFiles\\.*' -verbose -allowUntrusted" />

注意:skip:skipaction='Delete..ファイルとフォルダーの削除をスキップするために使用します。

更新 これは少し間違っているようです(展開はターゲットで行われたと思いますAfterCompileが、今見たように、TFSはターゲットを使用して展開を行います。したがって、必要なのは、説明されているようにターゲットCoreDropBuildをオーバーライドすることだと思います: here . (ただし、私はこれを試したことはありません)。CoreDropBuild

タスクをスレッドの作成者として使用するかCopy、個人的な好みに基づいて Robocopy/webdeploy を使用できます。

于 2013-03-01T09:37:40.270 に答える