После прочтения многих похожих постов и проблем с файлами, которые невозможно перезаписать, или с недоступностью web.config, потому что он доступен только для чтения, вот что у меня получилось:
<Target Name="BeforeBuild" Condition="$(Configuration) == 'MyAltDebugConfiguration'">
<ItemGroup>
<OriginalWebConfig Include="$(ProjectDir)Web.config"/>
<TempWebConfig Include="$(ProjectDir)TempWeb.config"/>
</ItemGroup>
<Exec Command=""$(DevEnvDir)tf.exe" checkout "$(ProjectDir)Web.config"" />
<Copy SourceFiles="@(OriginalWebConfig)" DestinationFiles="@(TempWebConfig)" />
<TransformXml Source="$(ProjectDir)TempWeb.config"
Transform="Web.$(Configuration).config"
Destination="Web.config" />
</Target>
Примечания:
Это работает как цель BeforeBuild.
Я хочу, чтобы он работал только при определенной конфигурации (альтернативная среда отладки), поэтому у меня есть Условие.При развертывании через Интернет развернуть цель публикации, и мне не нужно, чтобы эта цель запускалась.
Мне не нужно помнить, чтобы проверить web.config (только чтобы отменить его, когда яготово) поэтому я проверяю web.config перед началом преобразования.Если вы не используете TFS, вы можете удалить эту строку.
Поскольку VS (2010) \ msbuild не хочет выпускать исходный файл web.config, я использую временный файл (спасибо этой статье заинформация: http://www.diaryofaninja.com/blog/2011/09/14/using-custom-webconfig-transformations-in-msbuild)
Я попытался добавить команду для удаления TempWeb.config, но VS \ msbuild не хочет ее отпускать. Я могу с этим смириться, так как она не добавляется вTFS.