16

.csprojメイン ビルドの前にいくつかのカスタム タスクを実行するようにプロジェクトをカスタマイズしています。ただし、タスクをまったく実行できません。

<Target Name="BeforeBuild" />ファイル内の要素のコメントを解除し.csproj、単純なメッセージ タスクを追加しましたが、ビルドすると出力にメッセージが表示されないため、タスクが実行されていないようです。したがって、このフラグメントはメッセージを出力しません。

リスト 1: メッセージが表示されない

<Target Name="BeforeBuild">
    <Message Text="About to build ORM layer" Importance="normal" />
</Target>

ただし、一部の属性.csprojを台無しにすると、実行にまったく失敗する可能性があります。

リスト 2: MSBuild 構成エラー

<Target Name="BeforeBuild">
    <Message Text="About to build ORM layer" XXImportance="normal" />
</Target>

XXImportance属性に注意してください。私が得るビルドエラーは

My.csproj(83,46): error MSB4064: The "XXImportance" parameter is not supported by the "Message" task. Verify the parameter exists on the task, and it is a settable public instance property.

これは、XML が解析されていること、Messageクラスが見つかったこと、およびクラスが使用可能なプロパティに反映されていることを示しています。

タスクが実行されないのはなぜですか?

私は3.5フレームワークを使用しています。

更新 1: @Martin のアドバイスで、コンソールで MSBuild を実行しようとしたところ、このエラーが発生しました。

c:\path\to\my.csproj(74,11): error MSB4019: The imported
project "C:\Microsoft.CSharp.targets" was not found. Confirm
that the path in the <Import> declaration is correct, and that
the file exists on disk.

行 74 読み取り;

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

更新 2: C#3 コンパイラを使用する VS2008 でコンパイルしていますが、コンパイルしているプロジェクトはフレームワーク 2.0 プロジェクトです。Microsoft.CSharp.targetsコマンド ラインから実行すると (UPDATE 1 を参照)、ファイルが指定されている場所が混乱するため、ビルドが失敗したように見えます。

4

2 に答える 2

23

今日も同じ問題があり、それを機能させる方法を見つけました。

.csprojファイルのBeforeBuildターゲットは、Microsoft.CSharp.targetsファイルによってインポートされたMicrosoft.Common.targetsファイルで定義された(および参照された)ターゲットの再定義を目的としています。 .csproj。

問題は、Microsoft.CSharp.targetsをインポートする.csprojの行が、BeforeBuildターゲットの定義の後にあることです。インポート行をBeforeBuildターゲットの上に移動すると、すべてが正常に機能するはずです。

お役に立てば幸いです。

于 2012-06-08T01:15:27.147 に答える
16

イベントは発生していますが、VS で設定を変更する必要がある場合があります。

ツール->オプション->プロジェクトとソリューション->ビルドと実行:

MSBUild verbosity を最小または通常に設定します。

また、コンソールで msbuild を使用してコンパイルすると、上記の設定を変更しなくてもメッセージが表示されます。

于 2010-07-28T11:21:44.420 に答える