首页 文章

无法从.NET Core 2程序集中获取.NET Framework程序集中声明的Type

提问于
浏览
0

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

控制台应用程序需要读取在.NET Framework程序集中声明的类的程序集限定类型名称 . 它使用 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(String name,Boolean throwOnError,Boolean ignoreCase,Boolean reflectionOnly,StackCrawlMarkHandle stackMark,IntPtr pPrivHostBinder,Boolean loadTypeFromPartialName,ObjectHandleOnStack type,ObjectHandleOnStack keepalive)at System.RuntimeTypeHandle.GetTypeByName(String name) ,布尔值throwOnError,布尔值ignoreCase,布尔值reflectionOnly,StackCrawlMark&stackMark,IntPtr pPrivHostBinder,Boolean loadTypeFromPartialName)System.RuntimeType.GetType(String typeName,Boolean throwOnError,Boolean ignoreCase,Boolean reflectionOnly,StackCrawlMark&stackMark)at System.Type.GetType(String typeName) )

我意识到在我工作的代码中我引用了类型和代码中的枚举,它不仅仅引用了类型,但是工作代码显示引用的.NET Framework程序集可以加载而非工作代码表明该类型不适用于.NET Core控制台应用程序 .

1 回答

  • 0

    问题是类型名称是 Type.AssemblyQualifiedName ,其中包含版本号 .

    这是造成问题的版本号 . 一旦我删除了版本号并将其他信息留在了类型名称中,就可以了 .

相关问题