संपूर्ण प्रोजेक्ट के लिए C # 8.0 की अशक्त संदर्भ प्रकार सुविधा को कैसे सक्षम करें


82

के अनुसार सी # 8 घोषणा वीडियो "नल संदर्भ प्रकार" सुविधा पूरी परियोजना के लिए सक्रिय किया जा सकता।

लेकिन परियोजना के लिए इसे कैसे सक्षम किया जाए? मुझे Visual Studio 2019 पूर्वावलोकन 1 में प्रोजेक्ट गुण विंडो में कोई नया उपयुक्त विकल्प नहीं मिला।

.csprojयदि सी # भाषा संस्करण को 8.0 में बदल दिया जाए तो क्या यह 'विरासत' परियोजनाओं के लिए सक्षम हो सकता है ?

जवाबों:


85

दृश्य स्टूडियो 16.2 (पूर्वावलोकन 1 से) में, संपत्ति का नाम बदल दिया जाता है Nullable, जो सरल है और कमांड लाइन तर्क के साथ संरेखित करता है।

<PropertyGroup>
  ...
  <Nullable>enable</Nullable>
  <LangVersion>8.0</LangVersion>
</PropertyGroup>

ध्यान दें कि यदि आप लक्षित कर रहे हैं netcoreapp3.0या बाद में, आपको LangVersion8 निर्दिष्ट करने की आवश्यकता नहीं है , क्योंकि .NET कोर 3 में यह डिफ़ॉल्ट है।


पुराने Visual Studio संस्करणों के लिए:

  • 16.0 पूर्वावलोकन 2 से 16.1 तक, पर सेट NullableContextOptionsकरें enable
  • 16.0 पूर्वावलोकन 1 में, पर सेट NullableReferenceTypesकरें true

3
मैंने अभी वीएस 2019 / 16.1.1 के साथ यह कोशिश की और यह कुछ भी करने के लिए प्रकट नहीं हुआ। इसका परीक्षण करने के लिए, मैंने तब जाकर एक कक्षा में #nullable enable में डाल दिया और फिर मैं अशक्त वस्तुओं के बारे में चेतावनी देख सकता था।
लैरी स्मिथ

2
@ लॉरीस्मिथ माफी, यह बदलाव 16.2P1 में किया गया था। मैंने अपना उत्तर अपडेट कर दिया है। 16.1.1 में आपको NullableContextOptionsअभी भी आवश्यकता होगी ।
ड्रू नोज

1
ध्यान दें कि बूलियन तर्क थोड़ा गैर-सहज हो सकता है: enable"नए C # 8.0 सेटिंग को सक्षम करें जहां डिफ़ॉल्ट रूप से गैर-अशक्त हैं"। disableइसका मतलब है "इसे पुराने तरीके से करें जहां हर प्रकार अशक्त है।"
रयान लुनडी

1
मुझे <Project ToolsVersion = "16.0" ...> और <VisualStudioVersion ...> 16.0 </ VisualStudioVersion> को पुराने "15,0" से पहले <nullable> पुराने गैर-SDK प्रोजेक्ट्स पर काम करना होगा, भले ही वे वीएस 16.3 आरटीएम के गुण जीयूआई के माध्यम से सही ढंग से 4.8 के ढांचे में अपग्रेड किए गए थे। बिना किसी अतिरिक्त प्रोजेक्ट फ़ाइल संपादन के केवल C # 8 भाषा संस्करण का सम्मान किया गया।
टोनी वॉल

1
@TonyWall मैं उत्सुक हूं कि आपको इसकी आवश्यकता क्यों है। मैंने अभी वीएस 16.3.7 (यानी गैर-एसडीके शैली परियोजना) में एक नया .NET फ्रेमवर्क कंसोल ऐप बनाया, जोड़ा LangVersionऔर इसके लिए Nullableगुण .csprojऔर यह ठीक काम करता है। परियोजना ToolsVersion="15.0"भी है।
ड्रू नोक

32

ध्यान दें कि यह सेटिंग VS 2019 पूर्वावलोकन 1 और पूर्वावलोकन 2 के बीच बदल गई है। पूर्वावलोकन 2 या 3 के साथ, आपको इसकी आवश्यकता है .csproj:

<PropertyGroup>
  <LangVersion>8.0</LangVersion>
  <NullableContextOptions>enable</NullableContextOptions>
</PropertyGroup>

<NullableReferenceTypes>पहले जवाब में बताया गया है (जो है, जब मैं मूल रूप से 4 फरवरी 2019 इस जवाब लिखा, स्वीकार किए जाते हैं जवाब के रूप में चिह्नित किया गया था) समय है कि इस सवाल का जवाब लिखा गया था पर सही था, लेकिन यह अब मान्यता प्राप्त है।


इस विकल्प (के लिए उपलब्ध मूल्यों के बारे में अधिक जानकारी enable, disable, safeonly: आदि) github.com/dotnet/roslyn/blob/master/docs/features/...
सेर्गेई वी

8
क्या यह हालिया रिलीज़ में फिर से बदल गया है? यह मेरे लिए पूर्वावलोकन 4.2
Waldrumpus

5
चूंकि विज़ुअल स्टूडियो 6.2 <NullableContextOptions> को सरल बनाया गया है बस <Nullable> (स्वीकृत उत्तर देखें)
एंड्रयू हिल

13

@DrewNoakes के स्वीकृत उत्तर के अलावा, ध्यान दें कि अशक्त संपत्ति को एक बारDirectory.Build.props में उस फ़ाइल में जोड़े गए फ़ाइल में जोड़कर सभी परियोजनाओं के लिए सेट किया जा सकता है, जिसमें आपकी .slnफ़ाइल है।

बस अपनी Directory.Build.propsफ़ाइल को इस तरह परिभाषित करें :

<Project>

  <PropertyGroup>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

इसके प्रभावी होने के लिए आपको Visual Studio को पुनरारंभ करना होगा।

अधिक के बारे में Directory.Build.props


8

Visual Studio 2019 पूर्वावलोकन 2 और 3 के लिए , इयान ग्रिफ़िथ का जवाब देखें।

विजुअल स्टूडियो 2019 पूर्वावलोकन 1 के लिए समाधान :

.NET कोर प्रोजेक्ट के लिए अशक्त संदर्भ प्रकार की सुविधा को सक्षम करने के लिए , इस तरह NullableReferenceTypesसे .csprojफ़ाइल में संपत्ति जोड़ें :

<PropertyGroup>
  ...
  <NullableReferenceTypes>true</NullableReferenceTypes>
  <LangVersion>8.0</LangVersion>
</PropertyGroup>

जैसा कि @JulienCouvreur ने https://github.com/dotnet/project-system/issues/4058 के संबंध में टिप्पणियों में संदर्भित किया है , नई संपत्ति अभी तक 'पुरानी' परियोजना प्रणाली में समर्थित नहीं है, लेकिन C / 8.0 जारी होने से पहले समर्थित होगी।


क्या आपने लक्ष्य रूपरेखा को बदलने की कोशिश की है net472? कैसे / कहाँ से आपको वह सेटिंग मिली? यह संदर्भ बहुत उपयोगी होगा। मुझे कई चीजें मिलीं जो वीडियो दिखाने के लिए काफी काम नहीं करती हैं
पणगीतिस कनवास

@PanagiotisKanavos, उस टैग को YouTube पर Mads Torgersen द्वारा टिप्पणी में प्रस्तावित किया गया था - वीडियो का लेखक जो मैंने मूल प्रश्न में जोड़ा है
सर्गेई V

1
यह संपत्ति अभी तक 'पुरानी' परियोजनाओं में समर्थित नहीं है। इस मुद्दे को github.com/dotnet/project-system/issues/4058
जुलिएन कुवरेउर

7

विरासत csproj प्रारूप

आपने विरासत के .csprojप्रारूप के बारे में पूछा । पाठ संपादक में प्रोजेक्ट फ़ाइल खोलें और निम्नलिखित परिवर्तन करें:

  1. और संपत्ति समूह <LangVersion>8.0</LangVersion>में जोड़ें / बदलें :DebugRelease

     <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
        <LangVersion>preview</LangVersion>
    
  2. <Nullable>enable</Nullable>मुख्य में जोड़कर अशक्त संदर्भ प्रकारों के लिए समर्थन सक्षम करें PropertyGroup:

     <PropertyGroup>
        <Nullable>enable</Nullable>
    

Visual Studio 2019 v16.22 पूर्वावलोकन 3 में C # 8 और अशक्त संदर्भ प्रकार सिंटैक्स का उपयोग करके .NET WinForms ऐप के साथ परीक्षण किया गया।


एसडीके-शैली परियोजना फाइलें

एसडीके शैली की परियोजनाएं बहुत सरल हैं, और इसे विज़ुअल स्टूडियो के भीतर संपादित किया जा सकता है। इन सभी के लिए आपको जरूरत है (उसी PropertyGroupरूप में TargetFrameworkया TargetFrameworks):

  <PropertyGroup>
    <LangVersion>8.0</LangVersion>
    <Nullable>enable</Nullable>
  </PropertyGroup>

टिप्पणियाँ

  • .NET कोर 3.x प्रोजेक्ट्स डिफ़ॉल्ट रूप से C # 8 को लक्षित करते हैं , इसलिए आपको LangVersionउन परियोजनाओं के लिए निर्दिष्ट करने की आवश्यकता नहीं होगी ।

  • .NET फ्रेमवर्क परियोजनाओं के लिए डिफ़ॉल्ट C # 7.3 है, और आपको C # 8.0 भी नहीं मिलता है <LangVersion>latest</LangVersion>। आपको भाषा संस्करण को स्पष्ट रूप से 8.0 पर सेट करना होगा। कृपया प्रश्न के मेरे उत्तर को देखें। क्या C # 8 .NET फ्रेमवर्क का समर्थन करता है? अधिक जानकारी के लिए।


3

ध्यान देने योग्य बात यह है कि, अब तक यह किसी प्रोजेक्ट के गुण पृष्ठ में एक उजागर सेटिंग है:

"बिल्ड" टैब "अशक्त" सेटिंग दिखाता है

कम से कम VS2019 में 16.6+।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.