加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.NET vNext Core CLR缺少type.IsPrimitive

发布时间:2020-12-15 22:20:22 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试将一个网络应用程序迁移到ASP.Net vNext,最终的目的是让它在 Linux上运行. 该应用程序有很多反射代码,我必须缺少一些依赖关系,因为我正在得到如此代码的编译错误 Type.IsPrimitive,Type.GetConstructor Type.GetMethod Type.GetTypeArray Error CS
我正在尝试将一个网络应用程序迁移到ASP.Net vNext,最终的目的是让它在 Linux上运行.

该应用程序有很多反射代码,我必须缺少一些依赖关系,因为我正在得到如此代码的编译错误

Type.IsPrimitive,Type.GetConstructor Type.GetMethod Type.GetTypeArray
Error CS1061 ‘Type’ does not contain a definition for ‘IsPrimitive’ and no extension method ‘IsPrimitive’ accepting a first argument of type ‘Type’ could be found (are you missing a using directive or an assembly reference?)

Error CS1061 ‘Type’ does not contain a definition for ‘GetMethod’ and no extension method ‘GetMethod’ accepting a first argument of type ‘Type’ could be found (are you missing a using directive or an assembly reference?)

Error CS1061 ‘Type’ does not contain a definition for ‘GetProperties’ and no extension method ‘GetProperties’ accepting a first argument of type ‘Type’ could be found (are you missing a using directive or an assembly reference?)

Error CS1061 ‘Type’ does not contain a definition for ‘GetInterface’ and no extension method ‘GetInterface’ accepting a first argument of type ‘Type’ could be found (are you missing a using directive or an assembly reference?)

我的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"
        }

以下编译在VS 2013和.Net 4.5下,但不会在VS 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();
        }
    }
}

解决方法

如果您使用的是aspnetcore .IsPrimitive可用,但不是Type的成员.您可以在TypeInfo下找到它,可以通过调用Type的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库再次可用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读