72

そのため、VS 2010 をインストールし、TeamCity ビルド統合用に MSBuild スクリプトを変更中です。1つの例外を除いて、すべてがうまく機能しています。

ビルドを公開するときに作成した Web.conifg 変換ファイルを適用することを MSBuild に伝えるにはどうすればよいですか...

コンパイルされた Web サイトを生成する次のものがありますが、Web.config、Web.Debug.config、および Web.Release.config ファイル (3 つすべて) をコンパイル済み出力ディレクトリに出力します。スタジオでファイル システムへのパブリッシュを実行すると、変換が行われ、適切な変更が加えられた Web.config のみが出力されます...

<Target Name="CompileWeb">
    <MSBuild Projects="myproj.csproj" Properties="Configuration=Release;" />
</Target>

<Target Name="PublishWeb" DependsOnTargets="CompileWeb">
    <MSBuild Projects="myproj.csproj"
    Targets="ResolveReferences;_CopyWebApplication"
    Properties="WebProjectOutputDir=$(OutputFolder)$(WebOutputFolder);
                OutDir=$(TempOutputFolder)$(WebOutputFolder)\;Configuration=Release;" />
</Target>

どんな助けでも素晴らしいでしょう..!

これは他の方法で実行できることはわかっていますが、可能であれば新しい VS 2010 の方法を使用して実行したいと考えています。

4

6 に答える 6

63

同様の情報を探していたのですが、なかなか見つからなかったので、Visual Studio 2010 と MSBuild 4.0 に付属の .targets ファイルを調べてみました。変換を実行する MSBuild タスクを探すのに最適な場所だと思いました。

私が知る限り、次の MSBuild タスクが使用されます。

<Project ToolsVersion="4.0"
         DefaultTargets="Deploy"
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <UsingTask TaskName="TransformXml"
               AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>

    <PropertyGroup>
        <ProjectPath>C:\Path to Project\Here</ProjectPath>
        <DeployPath>C:\Path to Deploy\There</DeployPath>
        <TransformInputFile>$(ProjectPath)\Web.config</TransformInputFile>
        <TransformFile>$(ProjectPath)\Web.$(Configuration).config</TransformFile>
        <TransformOutputFile>$(DeployPath)\Web.config</TransformOutputFile>
        <StackTraceEnabled>False</StackTraceEnabled>
    </PropertyGroup>


    <Target Name="Transform">
        <TransformXml Source="$(TransformInputFile)"
                      Transform="$(TransformFile)"
                      Destination="$(TransformOutputFile)"
                      Condition="some condition here"
                      StackTrace="$(StackTraceEnabled)" />
    </Target>
</Project>

上記をテストしましたが、動作することを確認できます。ビルド スクリプトにより適合させるために、構造を少し調整する必要がある場合があります。

于 2010-06-03T22:07:51.267 に答える
14

これは、Package ターゲットを使用して一時ディレクトリを指定することで実現できます。

msbuild solution.sln /p:Configuration=Release;DeployOnBuild=true;DeployTarget=Package;_PackageTempDir=..\publish

http://pattersoc.com/blog/index.php/2010/07/15/visual-studio-2010-publish-command-from-msbuild-command-line/

于 2010-07-15T19:47:31.097 に答える
8

または、 XDT Transformation Toolを使用してみてください。

http://ctt.codeplex.com

あいまいなmsbuildターゲットをいじる代わりに、これを使用しています。web.configだけでなくapp.configでも動作します。

于 2011-05-23T08:33:47.757 に答える
0

私は MSBuild の専門家ではありませんが、このリンクの情報を使用して同じタスクを実行できました。

http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx

記事の下部近くに MSBuild に関連するセクションがあります。お役に立てれば。

于 2010-05-25T13:43:43.823 に答える