2017-05-11 9 views
5

विजुअल स्टूडियो 2017 और माइक्रोसॉफ्ट.NET.Sdk का उपयोग करने के लिए एक csproj में अपग्रेड करने के बाद, मेरा "पहले बिल्ड" और "आफ्टरबिल्ड" लक्ष्य अब नहीं चल रहे हैं। मेरे फ़ाइल इस तरह दिखता है:विजुअल स्टूडियो 2017 के साथ मैं पहले सेल्ड और आफ्टरबिल्ड लक्ष्य का उपयोग कैसे कर सकता हूं?

<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" निर्दिष्ट करते हैं, तो आप "निहित ऊपर और नीचे आयात" का उपयोग कर रहे हैं। इसका मतलब है कि आपके 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

क्या लक्ष्यफ्रेमवर्क प्रॉपर्टी को बाहरी प्रोप फ़ाइल में ले जाना संभव है? जब मैंने ऐसा करने की कोशिश की, तो विजुअल स्टूडियो मुझे "एक तरफा अपग्रेड" त्रुटि देता है। –

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

यह आपको एक मुहावरेदार वी.एस. 2017 प्रोजेक्ट फाइल हो जाता है के खिलाफ तारों अप, लेकिन इससे पहले कि आप पहले/बाद में ट्रिगर करते हैं, वह अभी भी कुछ बहस का विषय है

संबंधित मुद्दे