0

私はいくつかのプロジェクトで解決策を持っています。

メインプロジェクトのアセンブリのバージョンはビルド後のイベントで検査され、そのバージョンに関連付けられたリリースノートがTrac RSSから抽出され、アプリケーションに付属するXMLファイルとして保存されます。これは、ビルド後のイベントで行われます。

メインアセンブリのプロジェクトのビルド後のイベント:

Powershell -File "$(SolutionDir)scripts\makereleasenotes.ps1" $(TargetPath) $(ProjectDir)

これはVSで正常に機能します。

ただし、デプロイメントをビルドするときは、他の多くのステップが発生するため、ダブルクリックから実行されるコマンドラインmsbuildがあり、これにより、デプロイメントがビルドおよびパッケージ化されます。

このプロセスから実行すると、ビルド後のステップが実行されていないように見えます。

これは、私たちが使用するコマンドスクリプトです。

set app_main=%CD%
msbuild app.msbuild /target:Release;Cleanup

app.msbuildには、他のターゲットを含むターゲットがあります。

<Target Name="Release" DependsOnTargets="CreateDir;BuildRelease;CopyFiles"/>

と:

<Target Name="BuildRelease" > 

    <MSBuild Projects="App.Web.Application.sln" Properties="Platform=$(Platform);Configuration=Release; 
             OutDir=$(ReleaseDir)\$(DTResult)\$(ReleaseConfiguration)\" 
             Targets="Clean;Rebuild"> 
             <Output ItemName ="OutputFiles" TaskParameter="TargetOutputs"/>

    </MSBuild>

    etc.

したがって、外部のmsbuildスクリプトがソリューションに委任されており、ビルドでコンパイルされている個々のプロジェクトがないことがわかります。

従属プロジェクトのビルド後スクリプトは、msbuildスクリプトでソリューションがターゲットとして設定されたときに実行されることになっていますか?

もしそうなら、私の実行を停止しているのは何ですか?

そうでない場合は、個別に実行し、プロジェクトレベルのマクロ(PowerShellスクリプトがアセンブリを検査してリリースノートXMLを書き出すために使用している)に同等のパラメーターを提供する必要があると思いますか?

4

2 に答える 2

2

この問題は、ビルドとマクロ(具体的には、で終わる$ ProjectDir)のパスのスペースが原因で発生しました。ビルドスクリプトは、「yyyyMMddHH-mm」の形式のスペースを含むようにパスを設定します。これらのスペースによって槍で打たれたとき、Powershellへのこのパラメーターは無効でした。

$(ProjectDir)marcoはDRIVE:\ something \ something \に展開され、これを「」で囲むと「DRIVE:\ something」になるため、ビルド後のパラメーターに二重引用符を追加することはできません。 \ something \ "は、末尾の\"を\の代わりに"に拡張します。これは完全に混乱します。

スペースを削除するだけで、パラメーターが完全になり、ビルド後のスクリプトで引用符を機能させる方法を理解する必要がなくなりました。

于 2012-09-06T19:47:23.130 に答える
1

私はMSBuildの比較的初心者ですが、あなたの質問は4時間答えられずにそこに座っているようです。

まず、私が考えることができる唯一のことは、ビルド後のイベントでマクロ$(SolutionDir)を使用してPowerShellスクリプトに渡すことです。おそらく、それは予期しないディレクトリに解決されているため、PowerShellはそれを見つけることができません。私は個人的にソリューションに関連するマクロを使用することはありませんが、それは私だけです。MSBuildファイルに戻る予約パスが必要な場合は、他のマクロよりも早く解決されると思うので、常に$(MSBuildThisFileDirectory)を使用します。つまり、おそらく$(SolutionDir)の解決が遅すぎますか?

次に、ビルドイベントコマンドに他の単純なhelloworldタイプのコマンドを追加できる可能性があります。マクロの解決対象に関するデバッグ情報を出力するのに役立つもの。おそらくいくつかのエコーコマンド?

これで問題が解決しない場合は申し訳ありませんが、実際のビルド構成を確認しないと、わかりません。

于 2012-09-06T02:14:15.213 に答える