MSBUILDスクリプトとVS2010出版物は、web.config transformを適用します
-
04-10-2019 - |
質問
そのため、2010年のVSがインストールされており、TeamCityビルド統合のためにMSBUILDスクリプトを変更する過程にあります。 1つの例外を除いて、すべてがうまく機能しています。
MSBUILDに、ビルドを公開したときに作成したweb.conifg変換ファイルを適用したいことをどのように伝えることができますか...
コンパイルされた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の方法を使用してこれをやりたいと思います
解決
私は同様の情報を探していましたが、それを見つけていなかったので、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>
上記をテストしましたが、それが機能することを確認できます。ビルドスクリプトに適合するには、構造を少し調整する必要がある場合があります。
他のヒント
パッケージターゲットを使用してTEMPディレクトリを指定することにより、これを達成できるはずです。
msbuild solution.sln /p:Configuration=Release;DeployOnBuild=true;DeployTarget=Package;_PackageTempDir=..\publish
または、を使用してみます XDT変換ツール:
あいまいなMSBuildターゲットをいじるのではなく、これを使用しています。で動作します app.config だけでなく web.config.
次の変更で私のために働きました
<MSBuild Projects="$(ProjectFile)"
Targets="ResolveReferences;_WPPCopyWebApplication"
Properties="WebProjectOutputDir=TempOutputFolder;OutDir=$(WebProjectOutputDir);Configuration=$(Configuration);" />
Microsoft.webapplication.targetsファイルからmsbuildフォルダーのファイル
_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.
私はMSBuildの専門家ではありませんが、このリンクの情報を使用して同じタスクを達成することができました。
http://www.hanselman.com/blog/managingmultipreconfigurationfileanvironmentswithprebuildevents.aspx
記事の下部近くのmsbuildに関連するセクションがあります。お役に立てれば。
この問題に取り組む前に何日も探していた後、このトピックに対する別の答え:
公開プロファイルと構成名は一致するはずです。
私の場合、私の場合はそうではありませんでした。パブリッシングプロファイルを介して手動で公開することで、私の構成がパブリッシュプロファイルに設定されたため、私が望んでいた結果が得られました。ただし、MSBuildはインテリジェントであり、名前に基づいてパブリッシュプロファイルと構成を魔法のように接続します。 (コマンドに /p:構成を追加すると、参照されるプロジェクトの出力に関する他の奇妙なエラーが発生しました)。
私が意味することを正確に明確にするために:
コマンドラインからのmsbuildステートメント
msbuild myproject.csproj -t:clean -t:rebuild /p:deployonbuild = true /p:publishprofile = "development"
作品
- プロフィール名を公開します: : 発達
- ソリューション構成名: : 発達
動作しません
- プロフィール名を公開します: : 発達
- ソリューション構成名: :dev
お役に立てれば!