代码之家  ›  专栏  ›  技术社区  ›  awj

无法从.NET Core 2程序集中获取.NET框架程序集中声明的类型

  •  0
  • awj  · 技术社区  · 7 年前

    我有一个.NET Core 2控制台应用程序,它正在.NET Framework 4.7.1上运行的ASP.NET网站下的数据库上执行一些维护/升级工作。

    控制台应用程序需要读入在.NET框架程序集中声明的类的程序集限定类型名称。它用的是 Type.GetType("[assembly-qualified name]";

    这段代码对于内置的.NET类型非常有效,但是当涉及到在我们自己的程序集中定义的类型时,它会抛出异常。令人困惑的是,我可以在.NET Core控制台应用程序中声明其中一种类型的变量,但无法实例化 Type 引用同一类型的对象。

    例如,这是有效的。。。

    var cs = Common.CustomerManagement.Person.CustomerStatus.ApprovedCustomer;
    

    但是这个。。。

    var ct = Type.GetType("Common.CustomerManagement.Person+CustomerStatus, Common, Version=1.0.6793.16016, Culture=neutral, PublicKeyToken=null;");
    

    …抛出异常。。。

    System.IO.FileLoadException:给定的程序集名称或代码基无效。(HRESULT的异常:0x80131047)
    在System.RuntimeTypeHandle.GetTypeByName(字符串名称、Boolean throwOnError、Boolean ignoreCase、Boolean reflectionOnly、stackcrwlmarkhandle stackMark、IntPtr pPrivHostBinder、Boolean loadTypeFromPartialName、ObjectHandleOnStack type、ObjectHandleOnStack keepalive)
    在System.RuntimeTypeHandle.GetTypeByName(字符串名称、Boolean throwOnError、Boolean ignoreCase、Boolean reflectionOnly、stackcrwlmark&stackMark、IntPtr pPrivHostBinder、Boolean loadTypeFromPartialName)
    at System.RuntimeType.GetType(字符串类型名、Boolean throwOnError、Boolean ignoreCase、Boolean reflectionOnly、StackCrawlMark&stackMark)
    at System.Type.GetType(字符串类型名)

    我意识到在代码中我引用了一个枚举 类型和在不起作用的代码中,我只引用了该类型,但起作用的代码显示引用的.NET框架程序集 可以 加载,而非工作代码表明.NET Core控制台应用程序无法使用该类型。

    1 回复  |  直到 7 年前
        1
  •  0
  •   awj    7 年前

    问题是类型名是 Type.AssemblyQualifiedName 其中包括版本号。

    是版本号导致了这个问题。一旦我删除了版本号并在类型名中保留了其他信息,它就工作了。