1

MSBuild.exe v4.00 を使用しています。私のプロジェクト ファイルには、Parameters.MyEnvironment.xml という名前のファイルを Parameters.xml にコピーするビルド ターゲットがあります。"MyEnvironment" は、MSBuild.exe がいつどこで呼び出されるかによって異なります。

これが実行されると、Parameters.xml が MSDeployPublish ターゲットの他のプロセスによって使用されます。

最後に、ファイル Parameters.xml を削除します。これは、環境固有のファイルの 1 つのコピーにすぎないためです。

上記のように実行すると、MSDeployPublish ターゲットは Parameters.xml が存在しないかのように動作しますが、エラーは報告されません。

ただし、プロジェクトのビルドが完了した後も Parameters.xml が残るように削除タスクを削除すると、MSDeployPublish はそれを認識して正しく使用します。奇妙なことに、Parameters.MyEnvironment.xml への変更は、次のビルド プロセスにすぐに反映されます。

要約すると、後続のターゲットが使用するプロジェクト フォルダーに (以前は存在しなかった) ファイルをコピーしても機能しません。ただし、元のファイルをそのままにして、新しいバージョンのソースで上書きすると、新しいコンテンツが反映されて機能します。

この作成者は、MSBuild でのロック/ファイルを開く問題を特定しましたが、ここでも同じことが起こっていますか? http://dotnet.dzone.com/articles/using-custom-webconfig-0

4

1 に答える 1

0

まあ、私はまだMSDeployPublishターゲットが私のコピータスクをつまずく理由の根底に到達していません。ただし、今のところ一緒に暮らせる厄介な回避策があります。

これらのターゲットをwdprojファイルに追加しました。

<Target Name="BeforeTeamCity">
    <Copy Condition="Exists('$(MSBuildProjectDirectory)\Parameters.$(Configuration).xml')" SourceFiles="$(MSBuildProjectDirectory)\Parameters.$(Configuration).xml" DestinationFiles="$(MSBuildProjectDirectory)\Parameters.xml" />
  </Target>

<Target Name="AfterTeamCity">
  <Delete Files="$(MSBuildProjectDirectory)\Parameters.xml"/>
</Target>

以前は、BeforeTargets属性とAfterTargets属性を使用して、ビルドの残りの部分にそれらを折りたたむことを試みていたので、MSBuild.exeを1回呼び出すだけですべてを実行でき、それらはうまくチェーンされます。

これをあきらめて、MSBuild.exeを3回呼び出します。BeforeTeamCityターゲット用に1回、MSDeployPublishターゲット用に1回、AfterTeamCityターゲット用に1回。うまくいきます、図を見てください。

于 2013-03-23T21:35:35.900 に答える