私はMSBuildを初めて使用し、プロジェクト設定の「ビルド後のイベントコマンドライン」オプションを介して呼び出される、プロジェクトに1つのMSBuildSettings.xmlファイルを設定しようとしています。これは、3つの特定のタスクを実行します。
$(MSBuildBinPath)\msbuild.exe "$(ProjectDir)MSBuild\MSBuildSettings.xml"
MSBuildSettings は、3 つの特定のタスクを実行します。私の最初の 2 つのタスク (以下の「YUI」と「LESS」) は完全に機能しています。追加しようとしている新しいタスク (「暗号化」) は、変換が行われた後に web.config を暗号化することです。
次のような構造の単一の xml ファイルを使用しています。
<Project DefaultTargets="YUI;LESS;Encrypt;">
...
<Target Name="YUI">...</Target>
<Target Name="LESS" DependsOnTargets="YUI">...</Target>
<Target Name="Encrypt" AfterTargets="CopyAllFilesToSingleFolderForPackage">
<Exec Command="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -pef "connectionStrings" $(MSBuildProjectDirectory)\..\obj\Release\Package\PackageTmp -prov "MyProtectedDataProvider"" />
</Target>
</Project
基本的に、コマンドライン経由で aspnet_regiis を使用して connectionStrings セクションを暗号化しようとしました。(独自のプロバイダーも定義して動作しています。) PackageTmp フォルダーの web.config を変更しようとしているのは少し奇妙ですが、私が知る限り、それは変換された Web の前の最終的な場所です。 .config がデプロイされます (プロジェクト内の元の web.config ファイルを更新したくないことは明らかです)。コマンド/実行に問題はないと思いますが、それはそのタイミングです。この 3 番目のステップを、変換が発生した後にのみ実行する方法がわかりません。
ビルド出力の詳細ビュー オプションを有効にし、Microsoft.Web.Publishing.targets ファイルを掘り下げて、変換後に web.config 暗号化ステップのみを呼び出すために使用できるターゲットを見つけようとしました。が発生しましたが、私が試した AfterTargets に関係なく、常に次のようになります。
The target "whatever" does not exist in the project.
PipelinePreDeployCopyAllFilesToOneFolder、TransformWebConfig、PipelineTransformPhase、CopyAllFilesToSingleFolderForPackageなどを試しました..
追加メモ: web.config は公開時にのみ変換されることを理解しています (そして、ファイル システム オプションを使用して公開しています)。
また、これは単純な MSBuild です (TFS チーム ビルドなどではありません)。
変換後のステップで web.config のセクションを暗号化するための追加または代替オプションも大歓迎です。