2017-11-08 18 views
0

Visual Studioソリューションに含める角度のあるプロジェクトがあります。私は、csprojで直接ワイルドカードを使ってnode_modulesやそれに類するものを除いて、すべてのファイルを持つタイプASP.NET Core 2/Emptyの新しいプロジェクトを追加しました。.NET Core - 既定のビルドターゲットをオーバーライド

私が抱えている問題は、デフォルトのビルドターゲットをオーバーライドすることです。ビルドターゲットがトリガされたら、 "ng build"を呼びたいと思いますが、これは起こりません。

<Target Name="Build"> 
    <Message Importance="high" Text="Overriding default build" /> 
</Target> 

しかし、まだ、それは実行されません。これについていくつかの材料はherehere

1は、デフォルトのビルドターゲットを上書きしようとしています。

2はDefaultTargetsを指定しようとしましたが、それはちょうど同じ呼び出されません。

<Project DefaultTargets="NgBuild" Sdk="Microsoft.NET.Sdk.Web"> 
    ... 
<Target Name="NgBuild"> 
    <Message Importance="high" Text="Overriding default build" /> 
</Target> 

私はメッセージがある属性BeforeTargets="Build"を追加した後にのみ。

質問ですが、どうすればデフォルトのビルド動作を上書きできますか?最終的には、<Exec Command="ng build">を呼び出すターゲットを持っていて、.exeを生成せず、プロジェクトに.csファイルを必要としません。

+0

なぜあなたはあなたの全体のプロジェクトファイルを投稿しないでください。この場合、定義の順序とファイルの定義方法は重要です。 –

答えて

0

あなたの問題を解決するには、新しいターゲットを指定する必要があります。

私.csprojの例では、私は次のようしている行:

<Target Name="TestTarget"> 
    <Exec Command="echo hello" /> 
    <Exec Command="echo goodbye" /> 
    </Target> 

それらを呼び出すことが、私は次のコマンドを実行する必要があります:あなたは、コマンドを指定することができ、このシナリオでは

dotnet msbuild /t:TestTarget 

をし、実行の順序。希望、これは役に立ちます。

0

Buildターゲットがオーバーライドされない理由は、カスタムターゲットがロードされているときにまだ定義されていないためです。カスタムターゲットはデフォルトターゲットによってオーバーライドされます。

<Project Sdk="…">を使用してSDKベースのプロジェクトファイルを使用する場合、プロジェクトファイルの前後に、SDKのpropsファイルとtargetsファイル(わずか2つのmsbuildプロジェクトファイル)が自動的にインポートされます。 Buildターゲットは、実際にはプロジェクトの内容の後に来るインポートによって定義され、プロジェクトファイルで定義したものよりも優先されます。

<Project> 
    <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk.Web" /> 
    <!-- Project content --> 
    <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk.Web" /> 
    <Target Name="Build"> 
    <!-- this will override the default Build target. --> 
    </Target> 
</Project> 

しかし、SDKをコンパイルおよび生成を中心に構築されている:あなたは本当に(後でその上より)Buildターゲットを上書きしたい場合は

は、私はあなたが明示的なSDKの輸入に暗黙のSDKの輸入から移動示唆します.NETアセンブリBuildターゲットをオーバーライドすると、他のプロジェクトで参照できる出力を生成できないなど、予期しない結果が生じることがあります(必要な場合)。

あなたは、単にあなたのプロジェクトにビルドステップを追加したい場合は、私は、終了のビルドプロセスにフックカスタムターゲットを追加することをお勧め:

<Target Name="NgBuild" BeforeTargets="BeforeBuild"> 
    <Exec Command="ng build" /> 
</Target> 
+0

私のプロジェクトはゼロのC#コードを持っています - それはちょうど純粋な角度です、私はVisual Studioでそのように表示したいと思います(ビルド時にはdllを必要としません - ビルドにはangle/cliを使用します)。あなたのアイデアは良かったが、UnsupportedTargetFrameworkError(net47とnetstandard20の両方)を取得するようになりました。どんな考え方に移行するのですか? – veljkoz

+0

プロジェクトを使用していないのですか?私は、VSの純粋なtypescript/angularプロジェクトタイプはないと思います。たぶん "オープンフォルダ"機能を試してみてください。個人的には、VSCodeのtypescriptサポートはVSよりも優れていると思います。 –

+0

しかし、これは期待されていますが、 'Microsoft.NET' Sdksは主に.NETコードを構築するためのものです。最小のMSBuild共通のprops/targetsをインポートし、 'CoreCompile'ターゲットを実装し、VS 'typescriptターゲットをインポートするカスタムプロジェクトタイプを作る必要があります –

関連する問題