web-dev-qa-db-ja.com

MSBuildスクリプトとVS2010パブリッシュはWeb.configトランスフォームを適用します

そのため、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の方法を使用してこれを実行したいと思います

70
xspydr

私は同様の情報を探していましたが、まったく見つけられなかったので、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>

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

63

Packageターゲットを使用し、tempディレクトリを指定することにより、これを達成できるはずです。

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

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

13
pattersonc

または、XDT Transformation Toolを使用してみます。

http://ctt.codeplex.com

あいまいなmsbuildターゲットをいじるのではなく、これを使用しています。 app.configだけでなくweb.config

8
Brian Chavez

次の変更で私のために働いた

<MSBuild Projects="$(ProjectFile)"
         Targets="ResolveReferences;_WPPCopyWebApplication"
     Properties="WebProjectOutputDir=TempOutputFolder;OutDir=$(WebProjectOutputDir);Configuration=$(Configuration);" />

MsBuildフォルダーの下のMicrosoft.WebApplication.targetsファイルから

_CopyWebApplication

This target will copy the build outputs along with the 
content files into a _PublishedWebsites folder.

This Task is only necessary when $(OutDir) has been redirected
to a folder other than ~\bin such as is the case with Team Build.

The original _CopyWebApplication is now a Legacy, you can still use it by 
 setting $(UseWPP_CopyWebApplication) to true.
By default, it now change to use _WPPCopyWebApplication target in
 Microsoft.Web.Publish.targets.   
It allow to leverage the web.config trsnaformation.
5
Syam

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

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

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

0
Jonathan S.

この問題に取り組む前に何日も探していた後、このトピックに対する別の答え:

公開プロファイルと構成名は一致する必要があります。

私の場合はそうではありませんでした。公開プロファイルを使用して手動で公開すると、構成が公開プロファイルで設定されているため、必要な結果が得られました。ただし、MSBuildはインテリジェントになり、名前に基づいてパブリッシュプロファイルと構成を魔法のように結び付けます。 (コマンドに/ p:Configurationを追加すると、参照プロジェクトのoutputpathに関するその他の奇妙なエラーが発生しました)。

私が意味することを正確に明確にするために:

コマンドラインからのMSBuildステートメント

msbuild myproject.csproj -t:Clean -t:Rebuild/p:DeployOnBuild = true/p:PublishProfile = "Development"

[〜#〜] works [〜#〜]

  • プロファイル名の公開:開発
  • ソリューション構成名:開発

動作しない

  • プロファイル名の公開:開発
  • ソリューション構成名:Dev

お役に立てれば!

0
Hutjepower