8

Web.configファイルに次の構成があります

<Target Name="UpdateWebConfigForProjectsBeforeRun">
    <ItemGroup>
      <FilesToTransofm Include="ProjectsDeployBin\Web.*.$(Configuration).config"/>      
    </ItemGroup>    
    <Message Text="Transform file: %(FilesToTransofm.Identity)" />
    <TransformXml Source="web.config"
                  Transform="%(FilesToTransofm.Identity)"
                  Destination="web.config" />
  </Target>

私がやろうとしていることは、ProjectsDeployBinディレクトリからすべての構成を取得し、各ファイルをメインのweb.configに適用することです。

最初の変換後、メインのweb.configがmsbuildによってロックされました。

では、どうすればこの問題を修正できますか?ファイルのコレクションによってweb.configを変換する他の方法はありますか?ありがとう。

4

1 に答える 1

8

お気づきのとおり、Visual Studio 2010に付属のTransformXmlタスクには、ソースファイルがロックされたままになるバグがあります。

これを回避するには、各変換の前にソースファイルの一時的なコピーを作成します。次に、変換ファイルごとに複数のタスクを実行するため(コピーと変換)、タスクバッチ処理ではなくターゲットバッチ処理に切り替える必要があります。

例:

<ItemGroup>
  <FilesToTransofm Include="ProjectsDeployBin\Web.*.$(Configuration).config"/>      
</ItemGroup>

<Target Name="UpdateWebConfigForProjectsBeforeRun"
        Inputs="@(FilesToTransofm)"
        Outputs="%(Identity).AlwaysRun">
  <Message Text="Transform file: %(FilesToTransofm.Identity)" />
  <Copy SourceFiles="web.config"
        DestinationFiles="web.pre-%(FilesToTransofm.Filename).temp.config" />
  <TransformXml Source="web.pre-%(FilesToTransofm.Filename).temp.config"
                Transform="%(FilesToTransofm.Identity)"
                Destination="web.config" />
</Target>

簡単なテストから、このバグはVisual Studio 2012で修正されているように見えますが、それを文書化したリファレンス/ソースを見つけることができず、元のConnectバグは表示されなくなりました。

于 2012-10-19T01:23:42.993 に答える