3

私は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 &quot;connectionStrings&quot; $(MSBuildProjectDirectory)\..\obj\Release\Package\PackageTmp -prov &quot;MyProtectedDataProvider&quot;" />
    </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 のセクションを暗号化するための追加または代替オプションも大歓迎です。

4

1 に答える 1

0

最終的に、次の構造の*.wpp.targetsファイルのみを使用することになりました。

<Project xmlns="http://schemas.microsoft.com/developer/MsBuild/2003">
    <Target Name="AfterBuild">
        ... My YUI steps and my LESS steps ...
    </Target>
    <Target Name="Encrypt" AfterTargets="CopyAllFilesToSingleFolderForPackage">
        ... My web.config encrypt steps ...
    </Target>
</Project>

正直なところ、最初のステップ(AfterBuild)の命名の背後にある理由を完全には理解しておらず、いつ実行するかを自動的に認識しています。私は本当に自分の名前と明確なAfterTargetsまたはBeforeTargetsか何かを持っていたいのですが、そのアプローチには運がありませんでした。AfterTargetsを使用した2番目のターゲットは、私にはある程度意味があります。

しかしとにかく、それは動作します。すべてが1つのwpp.targetsファイルに含まれ、正常に機能しているようです。ただし、wpp.targetsファイルに変更を加えるたびに、プロジェクトファイルをアンロード/リロードしなければならないのは少し面倒ですが、これはおかしなことです。

于 2012-06-28T04:43:14.513 に答える