2017-05-03 10 views
8

हैलो मुझे एक अजीब समस्या है।शून्य प्रचार सुविधा और रेजर विचार

मैं इस

@(Model.ligneDossierLie?.dossier_id) 

अपने प्रोजेक्ट 4.6.1 फ्रेमवर्क पर आधारित है की तरह मेरे उस्तरा पन्नों में अशक्त प्रचार सुविधा का उपयोग और मैं पिछले codeDom संकलक उपयोग 1.0.4 और संकलक 2.1.0

रेज़र दृश्य में मुझे एक त्रुटि संदेश कह रहा है कि मैं सी # 6 सुविधा सी # 5 के साथ उपयोग नहीं कर सकता।

लेकिन मेरी परियोजना # 7 ग ....

उपयोग कर रहा है मैं वापस # 6 ग रोल और यह ठीक काम करता है।

क्या कोई इस मामले में सी # 7 का उपयोग करने के बारे में जानता है?

धन्यवाद।

Web.config

<system.codedom> 
    <compilers> 
     <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/> 
    </compilers> 
    </system.codedom> 

compilerOptions="/langversion:6 

पर 7 स्थापित किया गया था और मैं 6 करने के लिए वापस रोल है कि मैं त्रुटि अब और, मेरे विचारों का संकलन और सही ढंग से काम

+0

हो सकता है कि [मेरे समान प्रश्न] (http

अपनी दस्तावेज़ीकरण के अनुसार, आप पैकेज में शामिल करने के लिए है : //stackoverflow.com/q/42700380/107625) ([उत्तर] सहित [http://stackoverflow.com/a/42712883/107625)) मदद करता है? –

+0

हम इसके लिए [StackExchange.Precompilation] (https://github.com/StackExchange/StackExchange.Precompilation) का उपयोग करते हैं; टूल्स के बीच बिट्स हैं जो आपको रेज़र में सी # vLatest का उपयोग करने देते हैं - इस तरह: https://github.com/StackExchange/StackExchange.Precompilation/blob/fd536b764983e2674a4549b7be6f26e971190c1e/Test.WebApp/Global.asax.cs#L32 –

+0

@UweKeim I आपका प्रश्न देखा, लेकिन यह मेरे मामले में समस्या नहीं है। धन्यवाद – Julien

उत्तर

5

कर रहे हैं यह आप लगता नहीं किया था के बाद वास्तव में सी # 6 और सी # 7 सुविधाओं का उपयोग कर सकते हैं, हालांकि इसे थोड़ा काम करने की आवश्यकता है।

जोड़े इन पैकेजों:

  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform (1.0.4 वर्तमान में)
  • Microsoft.Net.Compilers (2.1.0 वर्तमान में)

करें कि आप अपने web.config में इस खंड है बनाओ:

<system.codedom> 
    <compilers> 
    <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:7 /nowarn:1659;1699;1701" /> 
    <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" /> 
    </compilers> 
</system.codedom> 

और आपके 01 में आवश्यक आयातफ़ाइल (वहाँ स्वचालित रूप से होना चाहिए, लेकिन यह जाँच):

<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.4\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.4\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" /> 
<Import Project="..\packages\Microsoft.Net.Compilers.2.1.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.1.0\build\Microsoft.Net.Compilers.props')" /> 

और यह इस लक्ष्य:

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> ... </Target> 

पिछला जवाब:

आपको लगता है कि उपयोग नहीं कर सकते क्योंकि एएसपी.नेट एमवीसी रेजर व्यू इंजन आपके विचारों को संकलित करने के लिए रोज़लिन का उपयोग नहीं करता है। इसलिए यह सी # 6 और उच्च (शून्य प्रक्षेपण ऑपरेटर = सी # 6) से उपलब्ध सुविधाओं का उपयोग नहीं कर सकता है।

आपको अपने कोड को प्री-सी # 6 शैली में लिखना है, या वैकल्पिक स्टैक इंजन का लाभ उठाने के लिए एक और पैकेज का उपयोग करना है, जैसे स्टैक एक्सचेंज बनाया गया है (Marc Gravell के लिए धन्यवाद): https://github.com/StackExchange/StackExchange.Precompilation

Install-Package StackExchange.Precompilation.Build -Pre 

और फिर Global.asax.cs में अपने Application_Start के अंत में इस डाल:

ViewEngines.Engines.Add(new RoslynRazorViewEngine()); 
+0

मुझे समझ में नहीं आता है। रेजर प्रतिलिपि बनाने के लिए Roslyn का उपयोग नहीं कर रहा है भले ही कंपाइलर और codeDom का अंतिम संस्करण स्थापित है? इस कैस में आप मुझे बता सकते हैं कि यह सी # 6 के साथ क्यों काम करता है और सी # 7 के साथ नहीं है? धन्यवाद – Julien

+0

नहीं, यह सी # 6 के लिए काम नहीं करता है। 5 के लिए यह करता है। यह पुराने 'सीएससी' सी # कंपाइलर का उपयोग करता है। –

+0

अजीब, मैं वर्तमान में शून्य विचारों का उपयोग कर रहा हूं इसलिए मेरे विचारों में सी # 6 सुविधा और यह ठीक काम करता है, लेकिन सी # 7 के साथ नहीं। मैं आपके समाधान का प्रयास करूंगा, लेकिन यह अजीब बात है। – Julien

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