2015-10-16 3 views
8

मैं अपने निर्माण सर्वर पर एक कोड विश्लेषण त्रुटि हो रही है त्रुटिCS8019 त्रुटि

... NETFramework, संस्करण = v4.6.AssemblyAttributes.cs (है 3,1): त्रुटि CS8019: निर्देश का उपयोग कर अनावश्यक।

यह एक टेम्पल फ़ाइल में है जो विजुअल स्टूडियो बनाता है।

अपने प्रोजेक्ट में मैं "Suppress results from generated code (managed only)" टिक है। मैंने सोचा होगा कि पर्याप्त होगा।

लेकिन मैं अभी भी सर्वर पर त्रुटि मिलती है और स्थानीय स्तर पर मैं कोई भी मिलता है।

कोई विचार?

+0

के लिए एक रोसलिन मुद्दा नहीं है यह https://github.com/dotnet/roslyn/issues/5162 –

उत्तर

5

के लिए गुगलिंग CS8019 असेंबली एट्रिब्यूट्स ने this blog post जैसे कई रोचक लेख प्रस्तुत किए। उद्धरण:

सौभाग्य से हमारे लिए, एमएसबिल्ड पर्याप्त लचीला है ताकि हम इसके आसपास काम कर सकें। अच्छी डिजाइन इस फ़ाइल को इंटरमीडिएट निर्देशिका (आमतौर पर ओबीजे कहा जाता है) में उत्पन्न करना है, क्योंकि यह वह जगह है जहां सभी क्षणिक और अस्थायी फ़ाइलों को निर्माण प्रक्रिया के दौरान जाना चाहिए। हम या तो हमारी परियोजना फ़ाइल में इस गुण सेट कर सकते हैं:

<PropertyGroup> 
    <TargetFrameworkMonikerAssemblyAttributesPath>$([System.IO.Path]::Combine('$(IntermediateOutputPath)','$(TargetFrameworkMoniker).AssemblyAttributes$(DefaultLanguageSourceExtension)'))</TargetFrameworkMonikerAssemblyAttributesPath> 
</PropertyGroup> 

या अगर अपने निर्माण एक आम .props फ़ाइल, इस गुण सेट का उपयोग करता है। इससे यह सुनिश्चित होगा कि आपका निर्माण TEMP निर्देशिका पर निर्भर नहीं है और यह अलग, दोहराने योग्य और वृद्धिशील है।

2

मीकल का उत्तर केवल आंशिक रूप से यहां सहायता करता है। हां, आप रीडायरेक्ट कर सकते हैं कि वह फ़ाइल कहां लिखी गई है लेकिन यह अभी भी CS8019 नियम का उल्लंघन करेगी।

  1. इसके अलावा कुछ करने के लिए <TargetFrameworkMonikerAssemblyAttributeText> संपत्ति है कि नियम का उल्लंघन नहीं करता सेट:

    आपके पास दो विकल्प। उदाहरण के लिए:

    // &lt;autogenerated /&gt; 
    [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(&quot;$(TargetFrameworkMoniker)&quot;, FrameworkDisplayName = &quot;$(TargetFrameworkMonikerDisplayName)&quot;)] 
    
  2. या, किसी ऐसे स्थान पर अस्थायी नहीं करने के लिए फ़ाइल अनुप्रेषित। मेरे मामले में मैंने इसे समाधान रूट पर लिखना चुना ताकि सभी परियोजनाएं फाइल साझा कर सकें। मैंने फिर उल्लंघन को हटाने के लिए फ़ाइल को मैन्युअल रूप से संपादित किया और फ़ाइल को मेरे शेष कोड के साथ किया। अगर फ़ाइल पहले से मौजूद है तो फाइल अधिलेखित नहीं होती है, इसलिए यह आम तौर पर सुरक्षित होगी।

+0

इनमें से कोई भी चेतावनियों को दबाने के लिए नहीं, एक और समाधान प्रदान किया जाता है। –

6
  1. केवल TargetFrameworkMonikerAssemblyAttributesPath संपत्ति की स्थापना चेतावनी नहीं निकालता है। यह उस फ़ाइल को स्थानांतरित करता है जो चेतावनी उत्पन्न करता है, जो उपयोगी साबित होगा।
  2. TargetFrameworkMonikerAssemblyAttributeText संपत्ति काम नहीं करता है की स्थापना। ऐसा प्रतीत होता है कि इस संपत्ति को उस लक्ष्य द्वारा ओवरराइट किया गया है जो इस फ़ाइल को उत्पन्न करता है। (एमएसबिल्ड 14.0 में, संपत्ति माइक्रोसॉफ्ट.CSharp.CurrentVersion.targets फ़ाइल में लक्ष्य _SetTargetFrameworkMonikerAttribute द्वारा ओवरराइट की गई है और बाद में इसे Microsoft.Common.CurrentVersion.targets फ़ाइल में GenerateTargetFrameworkMonikerAttribute लक्ष्य में संदर्भित किया जा रहा है।)
  3. (कार्य समाधान) स्थापना TargetFrameworkMonikerAssemblyAttributesFileClean झूठी ओवरराइट किया जा रहा है, तो वह पहले से मौजूद से फ़ाइल कर पाएगा को। इस प्रकार आप बिल्ड स्क्रिप्ट को उत्पन्न कर सकते हैं, using ...; लाइनों को मैन्युअल रूप से ठीक करें, इसे सहेजें और देखें कि पुनर्निर्माण के दौरान इसे पुन: उत्पन्न नहीं किया जाता है। इस बिंदु पर, फ़ाइल को एक अस्थायी पथ में रखकर समझ में आता है।

    एक SharedBuildScript.msbuild.xml फ़ाइल में निम्न और सुनिश्चित करता है व्यक्तिगत परियोजना फ़ाइलों के भीतर है कि की चर्चा करते हुए कहा कि वे सभी एक ही एकल फाइल का उल्लेख जोड़ना:

    <PropertyGroup> 
        <TargetFrameworkMonikerAssemblyAttributesFileClean>False</TargetFrameworkMonikerAssemblyAttributesFileClean> 
        <TargetFrameworkMonikerAssemblyAttributesPath>$(MSBuildThisFileDirectory)SharedAssemblyAttributes.cs</TargetFrameworkMonikerAssemblyAttributesPath> 
    </PropertyGroup> 
    
संबंधित मुद्दे