かなり大規模なWebアプリケーションをビルドおよび展開するために、MSBuildスクリプトを機能させようとしています。(ここでは、数十のディレクトリにある数千のファイルについて話しています。これは、ほとんど継承されたレガシーコードベースであるため、私ができることはあまりありません。)ビルド自体は正常に実行されますが、コピーを取得できないようです。正しく機能しているドロップ場所へのファイル。
これは、ビルドスクリプトにあるものを示すスニペットです。
<PropertyGroup Condition=" '$(UseBuildNumber)' == 'true' ">
<ReleaseDirectory>$(ReleaseBaseDirectory)$(ReleaseName)\$(BuildNumber)</ReleaseDirectory>
</PropertyGroup>
<ItemGroup>
<OutputFiles Include="
$(SourceRoot)**\*.aspx;
$(SourceRoot)**\*.dll;
$(SourceRoot)**\*.gif;
$(SourceRoot)**\*.ascx;
" />
</ItemGroup>
<Message Text="Output files ==> @(OutputFiles)" />
<Copy
SourceFiles="@(OutputFiles)"
DestinationFolder="$(ReleaseDirectory)"
SkipUnchangedFiles="false"
/>
個々のパスが正しく拡張され、両方が実際に正しいパスを持っている<Message/>
ことを確認するために、そこにいくつかの追加機能を追加しました。ただし、出力では、次のようになります(簡潔にするためにフルパスは省略されています)。$(SourceRoot)
$(ReleaseDirectory)
Task "Message"
Output files ==> ...\Requirement1866**\*.aspx;...\Requirement1866**\*.dll;...\Requirement1866**\*.gif;...\Requirement1866**\*.ascx
Done executing task "Message".
明らかに、ワイルドカード拡張は実行されておらず、次のCopy
場合(予想どおり)失敗します。私は1つだけ含めています。実際には、これはファイル名のワイルドカードパターンごとに繰り返されます(これは、上記のビルドスクリプトスニペットに含めたものよりもはるかに多くなります)。
Using "Copy" task from assembly "Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Task "Copy"
Copying file from "*basedir*\Requirement1866**\*.aspx" to "*targetdir*\Requirement1866\*buildnumber*\*.aspx".
Command:
copy /y "*basedir*\Requirement1866**\*.aspx" "*targetdir*\Requirement1866\*buildnumber*\*.aspx"
d:\Builds\215\BuildType\TFSBuild.proj(120,5): error MSB3021: Unable to copy file "*basedir*\Requirement1866**\*.aspx" to "*targetdir*\Requirement1866\*buildnumber*\*.aspx". Illegal characters in path.
に続く:
d:\Builds\215\BuildType\TFSBuild.proj(120,5): error MSB3021: Unable to copy file "*basedir*\Requirement1866**\*.aspx" to "*targetdir*\Requirement1866\*buildnumber*\*.aspx". Illegal characters in path.
グーグルでの努力で遭遇した唯一の合理的に関連するヒットは、コピータスク-パス内の不正な文字ですが、私はすでにを使用して<ItemGroup>
おり、<CreateItem>
例(適応)はまったく機能せず、エラーで早期に中止しましたそれは不明だと言っていTaskParameter
ます(申し訳ありませんが、目の前に正確なエラーメッセージがありません)。
一時的な対策として、関連するファイルをビルド出力ディレクトリから目的の場所に手動でコピーすることもできますが、そのプロセスを自動化する必要があります。
次に、MSBuildを使用して、ビルドプロセス中に作成されたファイルを、相対ディレクトリ構造を保持したまま、1つずつ一覧表示せずに出力ディレクトリにコピーするにはどうすればよいですか?