2017-05-11 22 views
5

Visual Studio 2017とMicrosoft.NET.Sdkを使用するようにcsprojにアップグレードした後、私の "BeforeBuild"と "AfterBuild"ターゲットはもはや実行されていません。私のファイルには、次のようになります。Visual Studio 2017でBeforeBuildとAfterBuildターゲットを使用するにはどうすればよいですか?

<Project Sdk="Microsoft.NET.Sdk"> 

    <PropertyGroup> 
    <TargetFramework>net46</TargetFramework> 
    </PropertyGroup> 

    <!-- my targets that don't run --> 
    <Target Name="BeforeBuild"> 
     <Message Text="Should run before build" Importance="High" /> 
    </Target> 

    <Target Name="AfterBuild"> 
     <Message Text="Should run after build" Importance="High" /> 
    </Target> 

</Project> 

答えて

5

あなたがProject Sdk="Microsoft.NET.Sdk"を指定した場合、あなたは「暗黙の上部と下部の輸入」を使用しています。これは、 "BeforeBuild"と "AfterBuild"ターゲットをオーバーライドしているcsprojファイルの一番下にMicrosoft.NET.Sdk/Sdk.targetsへの見えないインポートがあることを意味します。

インポート順序を制御できるように、明示的なインポートを使用してこれを修正できます。

<Project> 

    <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" /> 

    <PropertyGroup> 
    <TargetFramework>net46</TargetFramework> 
    </PropertyGroup> 

    <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" /> 

    <!-- add your custom targets after Sdk.targets is imported --> 
    <Target Name="BeforeBuild"> 
     <Message Text="Should run before build" Importance="High" /> 
    </Target> 

    <Target Name="AfterBuild"> 
     <Message Text="Should run after build" Importance="High" /> 
    </Target> 

</Project> 
+0

外部のPropsファイルにTargetFrameworkプロパティを移動することは可能ですか?私がそれをやろうとすると、Visual Studioは私に「片道アップグレード」エラーを出します。 –

+0

@AlexI新しいSOの質問を開こうとする。これは、この回答の内容とは別のものです – natemcmaster

+0

ちょっとだけ:https://stackoverflow.com/questions/45154654/vs-2017-new-project-format-and-external-props-file –

0

associated MSBuild git issueこれは、あなたの慣用VS 2017のプロジェクトファイルを取得する代わりに、ターゲット

に対して適切なタスクや配線を名前
<Project Sdk="Microsoft.NET.Sdk"> 
    <PropertyGroup> 
    <TargetFramework>net46</TargetFramework> 
    </PropertyGroup> 

    <!-- Instead of BeforeBuild target --> 
    <Target Name="MyCustomTask" BeforeTargets="CoreBuild" > 
     <Message Text="Should run before build" Importance="High" /> 
    </Target> 

    <!-- Replaces AfterBuild target --> 
    <Target Name="AnotherCustomTarget" AfterTargets="CoreCompile"> 
     <Message Text="Should run after build" Importance="High" /> 
    </Target>  
</Project> 

、今後のタスク名としてBeforeBuild/AfterBuildを使用してないを推奨しています前/後にトリガーするターゲットは、今でもまだまだ議論の対象です。

関連する問題