2015-03-12 6 views
12

मैं लिनक्स पर चलने के आखिरी उद्देश्य के साथ एएसपी.Net vNext पर एक वेब ऐप माइग्रेट करने का प्रयास कर रहा हूं।एएसपी.नेट वीएनएक्स कोर सीएलआर गायब प्रकार। आईएसप्रिमेटिव

एप्लिकेशन प्रतिबिंब कोड का एक बहुत कुछ है और मैं इस तरह के इस

Type.IsPrimitive, Type.GetConstructor Type.GetMethod Type.GetTypeArray के रूप में कुछ निर्भरता याद आ रही किया जाना चाहिए के रूप में मैं कोड पर त्रुटियों संकलन हो रही है त्रुटि CS1061 'टाइप' प्रकार 'प्रकार' के पहले तर्क को स्वीकार करने 'IsPrimitive' और कोई विस्तार विधि के लिए एक परिभाषा शामिल नहीं है 'IsPrimitive' पाया जा सकता है (यदि आप एक का उपयोग कर के निर्देश या एक विधानसभा संदर्भ याद कर रहे हैं?)

त्रुटि CS1061 'Type' में 'GetMethod' की परिभाषा नहीं है और कोई एक्सटेंशन विधि 'GetMethod' पहले स्वीकार नहीं करती है प्रकार 'प्रकार' का तर्क पाया जा सकता है (क्या आप एक प्रयोग निर्देश या असेंबली संदर्भ खो रहे हैं?)

त्रुटि CS1061 'टाइप' में 'GetProperties' की परिभाषा नहीं है और कोई एक्सटेंशन विधि 'GetProperties' पहले स्वीकार नहीं कर रही है प्रकार 'प्रकार' का तर्क पाया जा सकता है (क्या आप एक प्रयोग निर्देश या असेंबली संदर्भ खो रहे हैं?)

त्रुटि CS1061 'टाइप' में 'GetInterface' की परिभाषा नहीं है और कोई एक्सटेंशन विधि 'GetInterface' पहले स्वीकार नहीं कर रही है प्रकार 'प्रकार' का तर्क पाया जा सकता है (क्या आप एक प्रयोग निर्देश या असेंबली संदर्भ खो रहे हैं?)

मेरे पास अनुसरण है मेरी project.json फ़ाइलों

"frameworks" : { 
    "aspnetcore50" : { 
     "dependencies": { 
      "System.Runtime": "4.0.20-beta-22416", 
      "System.Linq": "4.0.0.0-beta-22605", 
      "System.Reflection": "4.0.10.0-beta-22605", 
      "System.Reflection.Primitives": "4.0.0.0-beta-22605", 
      "System.Runtime.Extensions": "4.0.10.0-beta-22605", 
      "System.Reflection.Extensions": "4.0.0.0-beta-22605" 
     } 

निम्नलिखित वी.एस. 2013 और नेट 4.5 के तहत ठीक संकलित लेकिन अभ्यस्त वी.एस. 2015 में संकलन ऊपर

using System; 
using System.Reflection; 


namespace Project1 
{ 
    public class Class1 
    { 
     public Class1() 
     { 
      Type lBaseArrayType = typeof(Array); 
      Type lStringType = typeof(string); 
      string[] lStringArray = new string[1]; 
      if (lStringType.IsPrimitive) 
      { 
      } 
      ConstructorInfo lConstructor = lStringType.GetConstructor(new Type[0]); 
      MethodInfo lMethod = lStringType.GetMethod("Equals"); 
      Type[] lTArray = Type.GetTypeArray(lStringArray); 
      PropertyInfo[] lProps = lStringType.GetProperties(); 
     } 
    } 
} 
+0

अपना प्रासंगिक कोड दिखाएं? अधिमानतः एक [न्यूनतम, पूर्ण, और सत्यापन योग्य उदाहरण] (http://stackoverflow.com/help/mcve)। यह उतना सरल हो सकता है जितना आप कुछ कथन का उपयोग कर रहे हैं, लेकिन यह जानना मुश्किल है जब तक कि आप हमें कोड न दिखाएं। – mason

+0

नीचे कोड का एक नमूना टुकड़ा है, यह कुछ भी नहीं करता है, लेकिन केवल –

+0

पर कॉल करने का प्रयास कर रहे तरीकों का चयन है, मैंने गिटहब पर स्रोत कोड को देखा और उन तरीकों को नहीं मिला। शायद यह उन चीजों में से एक है जिन्हें उन्होंने अभी तक .NET कोर के लिए लागू नहीं किया है? आप .NET 5 (गैर-कोर) में कंपाइलर निर्देशों के साथ उस सामग्री को संकलित करने से रोक सकते हैं। – mason

उत्तर

21

निर्भरता का उपयोग कर आप aspnetcore उपयोग कर रहे हैं में निर्भरता ing। Isprrimitive उपलब्ध है, लेकिन प्रकार के सदस्य के रूप में नहीं। आपको इसे TypeInfo के अंतर्गत मिल जाएगा, जिसे GetTypeInfo() प्रकार की विधि को कॉल करके एक्सेस किया जा सकता है। अपने उदाहरण में, यह होगा:

lStringType.GetTypeInfo().IsPrimitive 

Type.GetMethod() भी उपलब्ध है, लेकिन आप अपने project.json फ़ाइल में System.Reflection.TypeExtensions पैकेज को संदर्भित करने की आवश्यकता होगी।

Type.GetTypeArray() गुम है, लेकिन आप आसानी से सरणी में सदस्य प्रकारों की एक सरणी पुनर्प्राप्त करने के लिए एक सरल linq क्वेरी लिख सकते हैं।

Type.GetInterface() शामिल नहीं है, लेकिन फिर से System.Reflection.TypeExtensions का उपयोग करके एक और तरीका सामने आएगा जो निर्दिष्ट प्रकार के लिए सभी कार्यान्वित इंटरफेस के Type[] उत्पन्न करता है।

Type[] types = Type.GetInterfaces() 

Type.GetProperties()System.Reflection.TypeExtensions पुस्तकालय के माध्यम से फिर से उपलब्ध है।

+0

लेकिन ये विधियां उपलब्ध नहीं हैं .NET कोर में केवल डीएनएक्स –

+0

में आपको 'GetTypeInfo() 'तक पहुंच प्राप्त करने के लिए' सिस्टम का उपयोग करके 'चयन करना होगा। –

0

आप समान जानकारी प्राप्त करने के लिए स्थिर विधि System.Reflection.IntrospectionExtensions.GetTypeInfo() का उपयोग कर सकते हैं।

var arrayType = typeof(Array); 
    var stringType = typeof(string); 
    var stringArray = new string[1]; 
    var stringTypeInfo = stringType.GetTypeInfo(); 
    if (stringTypeInfo.IsPrimitive) 
    { 
    } 

    ConstructorInfo lConstructor = stringTypeInfo.DeclaredConstructors.Where(x => x.GetParameters().Any() == false).FirstOrDefault(); 
    MethodInfo lMethod = stringTypeInfo.DeclaredMethods.Where(x => x.Name == "Equals").FirstOrDefault(); 
    Type[] lTArray = stringArray.Where(x => x != null).Select(x => x.GetType()).Distinct().ToArray(); 
    PropertyInfo[] lProps = stringTypeInfo.DeclaredProperties.ToArray(); 
संबंधित मुद्दे