2009-10-08 14 views
8

現在、私は.\ReleaseフォルダにコードをコンパイルするWeb配置プロジェクトを設定しました。ビルド後、ファイルを別のマシンにコピーしたいのです(ビルドするディレクトリが削除されてから再作成されるためです)。Web配置プロジェクト - ビルド後のファイルのコピー

次のように設定されているコピーするファイル定義するためのItemGroup:

<ItemGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'"> 
    <ReleaseFiles Include=".\Release\**\*" /> 
    <OverrideFiles Include="..\website\App_Code\override\site.com\**\*" /> 
</ItemGroup> 

のウェブサイトには、「複数のサイトのために使用されるコードであるため、ソリューション内で設定し、いくつかのWebデプロイメントプロジェクトがあります。

はその後、私は、ファイルをコピーするAfterBuild目標を持っています。しかし、ReleaseFilesは、その原因となることができるか、コピーされません

<Target Name="AfterBuild" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <Copy SourceFiles="@(ReleaseFiles)" ContinueOnError="true" SkipUnchangedFiles="true" DestinationFiles="@(ReleaseFiles->'\\server\web\site.com\%(RecursiveDir)%(Filename)%(Extension)')" /> 
    <Copy SourceFiles="@(OverrideFiles)" DestinationFiles="@(OverrideFiles->'\\server\web\site.com\%(RecursiveDir)%(Filename)%(Extension)')" /> 
</Target> 

?私はエラー.\TempBuildDir\folder\subfolder - The process cannot access the file because it is being used by another process.を持っていましたが、その都度、folder\subfolderが異なるかもしれませんが、そのメッセージが表示されなくてもファイルはまだコピーされません。

問題は、以前はうまくいきました。

答えて

9

コアのトラブルは、あなたのサンプル中ItemGroupは、MSBuildのファイルがロードされる時に評価されていることである - .....と、その時点で、最も可能性が高い、それらのファイルがまだ存在しない

したがって、あなたの "ReleaseFiles"と "OverrideFiles"コレクションは空で、何もコピーされません。

<CreateItem Include=".\Release\**\*"> 
    <Output TaskParameter="Include" ItemName="ReleaseFiles"/> 
</CreateItem> 
<CreateItem Include="..\website\App_Code\override\site.com\**\*"> 
    <Output TaskParameter="Include" ItemName="OverrideFiles"/> 
</CreateItem> 

今、あなたは問題ないはず、とコピータスクがすべき:あなたがする必要がどのような

は動的後にビルドが起こっている(そして、ここで参照されるファイルが実際に存在している)あなたのItemGroupsを作成することです作業。

Marc

+0

CreateItemは、ItemGroupまたはTargetの下にありますか。 – SamWM

+0

コピータスクの前に 'AfterBuild'ターゲットに入れてください。 –

+0

それは私のためにそれを修正した – SamWM

関連する問題