2017-05-11 69 views
5

Visual Studio 2017 ve Microsoft.NET.Sdk kullanmak için bir csproj'a yükselttikten sonra, "BeforeBuild" ve "AfterBuild" hedeflerim artık çalışmıyor. Dosyam şöyle görünür: Eğer Project Sdk="Microsoft.NET.Sdk" belirttiğinizde, "örtülü üst ve alt ithalatı" kullanıyorsunuzVisual Studio 2017 ile BeforeBuild ve AfterBuild hedeflerini nasıl kullanabilirim?

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

cevap

5

. Bu, "BeforeBuild" ve "AfterBuild" hedeflerini geçersiz kılan csproj dosyanızın altındaki Microsoft.NET.Sdk/Sdk.targets için görünmez bir İçe Aktarım olduğu anlamına gelir.

İçe aktarma sırasını kontrol edebilmeniz için bunu açıkça içe aktarma kullanarak düzeltebilirsiniz.

<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

IS TargetFramework özelliğini harici sahne dosyasına taşımak mümkün mü? Bunu denediğimde, Visual Studio bana bir "tek yönlü yükseltme" hatası veriyor. –

+0

@AlexI yeni bir SO sorusu açmayı deneyin. Bu cevap yaklaşık – natemcmaster

+0

hakkında ayrıdır. Bunu yaptı: https://stackoverflow.com/questions/45154654/vs-2017-new-project-format-and-external-props-file –

0

associated MSBuild git issue görev adları gibi BeforeBuild/AfterBuild kullanılarak değil, ileriye yerine uygun şekilde görevi isim ve önerir hedefler

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

Bu size bir deyimsel VS 2017 proje dosyasını alır karşı kablolama yukarı, ama önce/sonra tetikleyen hangi hedefler hala bu noktada bir tartışma meselesidir