1

に基づくカスタム プロジェクト システムに取り組んでいMPFます。ビルドのために、プロジェクトが Visual Studio IDEとうまく統合されるようBuildに、必要なターゲットの最小セットを定義するカスタム ターゲット ファイルを定義しました。たとえば、ショートカット キーを使用して、読み込まれたプロジェクトのビルドをトリガーできます。これにより、ビルドが成功した場合、ショートカット+もアプリケーションを実行する必要があります。しかし、いいえ...ビルド出力は成功を示していますが、Visual Studio はアプリケーションを起動しようとしませんか? 何が足りないのか知りたい...CleanRebuildF6CtrlF5

私のカスタム プロジェクト ファイルはインポートされませMicrosoft.Common.targetsん。これはマネージ言語ではなく、共通のビルド ターゲットによって提供されるほとんどのものはプロジェクト システムに適用されないためです (また、MSBuild の統合を可能な限りスリムに保ちたいと考えています)。

https://msdn.microsoft.com/en-us/library/vstudio/ms171468(v=vs.110).aspxのドキュメントを読みました。デバッグ セクションでは、次の MSBuild プロパティが言及されてOutputPathAssemblyNameますOutputType。私のカスタムBuildターゲットはこれらすべてのプロパティを設定するので、Visual Studio は私のアプリケーションを実行するために必要なすべてを知っていると仮定しました (もちろん、私の言語サービスがまだデバッグをサポートしていなくても)。

ターゲット定義は次のBuildようになります...

<Target Name="Build" 
        DependsOnTargets="PrepareBuildProperties" 
        Returns="$(TargetPath)">
</Target>

Microsoft.Common.targetsファイルを調べたところ、Runターゲットも見つかりました。コメントは言う...

.EXE の場合は最終ビルド出力を実行します

基本的にこれを行っています(これは元のターゲット定義の短縮版です)...

<Target Name="Run"
        DependsOnTargets="$(RunDependsOn)">
    <Exec Command="$(TargetPath) $(StartArguments)" 
          WorkingDirectory="$(OutDir)" />
</Target>

Start without debuggingメニューからコマンドを選択した場合、または+Debugを押した場合、Visual Studio はこのターゲットを呼び出す必要がありますか?CtrlF5

4

1 に答える 1

-1

まず、こんな発言。

私のカスタム プロジェクト ファイルは、マネージド言語ではないため、Microsoft.Common.targets をインポートしません。

マネージ言語だけでなく、どの言語でも MSBuild .Targets ファイルを使用できるため、あまり意味がありません。たとえば、VC++ プロジェクトのビルドは、そのようなファイルに大きく依存します。さて、問題に戻ります。

ビルド出力は成功を通知しますが、Visual Studio はアプリケーションを起動しようとしませんか? 何が足りないのか知りたい

Visual Studio の最新バージョンは、プロジェクトのビルドや出力ファイルの実行とは関係ありません。MSBuild はプロセス全体を管理します。プロジェクトのビルド後に実行するファイルが必要な場所を指定する必要があります。

AfterBuild ターゲットを使用して、ビルドの完了後に実行するタスクを指定できます。このタグは、プロジェクト ファイルの Project タグ内に入ります。条件が満たされた場合にのみタスクが実行されるように条件を指定することもできます。

もう 1 つの方法は、ここで説明されているカスタム ビルド ステップを使用することです。この方法はもう少し柔軟です。

3 番目の方法がありますが、おそらく最も好ましくない方法です。ビルド後のイベントを使用できます。ビルド後のイベントを定義するには、これを Project タグの下に追加します。

<PropertyGroup>
    <PostBuildEvent> task command goes here </PostBuildEvent>
</PropertyGroup>

これに関する問題は、プロジェクト プロパティの [ビルド イベント] タブに表示されるため、ユーザーが表示して変更できる可能性があることです。ビルド後のイベントは、IDE ではなくユーザーが使用するように設計されています。

あなたが言及したExecタグは、タグの内容が実行されるべきコマンドラインとして解釈されるべきであることを示す組み込みタスクを表しています。上で説明した 3 つの手法はすべて、Execタスクを抽象化したものです。をクリックすると、このタスクが実行されますStart without debugging

于 2015-07-11T20:01:08.247 に答える