2017-05-11 4 views
5

Visual Studio 2017 및 Microsoft.NET.Sdk를 사용하도록 csproj로 업그레이드 한 후 "BeforeBuild"및 "AfterBuild"대상이 더 이상 실행되지 않습니다. 내 파일은 다음과 같습니다 : 당신이 Project Sdk="Microsoft.NET.Sdk"를 지정하면, 당신은 "암시 상단과 하단 수입"을 사용하는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

. 즉, "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 태스크 이름으로 BeforeBuild/AfterBuild를 사용 하지은 향후 대신 적절하게 작업 이름을 지정하고 권장 목표

<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> 

이 당신에게 관용적 VS 2017 프로젝트 파일을 얻을 수에 대한 배선까지, 이전/이후에 트리거하는 대상은 여전히이 시간에 약간의 논쟁 거리입니다.