【问题标题】:Cannot get Type declared in a .NET Framework assembly from a .NET Core 2 assembly无法从 .NET Core 2 程序集中获取在 .NET Framework 程序集中声明的类型
【发布时间】:2019-01-14 06:39:50
【问题描述】:

我有一个 .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(字符串名称,布尔 throwOnError,布尔 ignoreCase,布尔反射,StackCrawlMarkHandle stackMark,IntPtr pPrivHostBinder,布尔 loadTypeFromPartialName,ObjectHandleOnStack 类型,ObjectHandleOnStack keepalive)
在 System.RuntimeTypeHandle.GetTypeByName(字符串名称,布尔 throwOnError,布尔 ignoreCase,布尔反射,StackCrawlMark 和 stackMark,IntPtr pPrivHostBinder,布尔 loadTypeFromPartialName)
在 System.RuntimeType.GetType(字符串类型名称,布尔 throwOnError,布尔忽略大小写,布尔反射,StackCrawlMark 和 stackMark)
在 System.Type.GetType(String typeName)

我意识到在有效的代码中我引用了枚举 on 类型,而在无效的代码中我只引用了类型,但工作代码表明引用的 .NET Framework 程序集可以加载,而非工作代码表明该类型对 .NET Core 控制台应用程序不可用。

【问题讨论】:

  • 对您提供的程序集名称不满意。 “1.0.6793.16016”是一个非常丑陋的版本号,当你需要反射工作时,千万不要让构建系统自动增加[AssemblyVersion]。你将不可避免地在你的代码中弄错这个数字。顺便说一句,在 .netcore 项目中遇到的奇怪问题,我猜你是在自己解决这个问题,而不是在 Visual Studio 中使用 Project > Properties > Package。
  • 你是对的 - 我发现一旦我从程序集限定名称中删除了版本号,它就被接受了。
  • @HansPassant - 如果您将评论更改为建议的答案,那么我会将其标记为已接受。
  • 我只是不知道那个丑陋的版本号是从哪里来的。在您自己的回答中告诉我们。

标签: c# types .net-core


【解决方案1】:

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

这是导致问题的版本号。一旦我删除了版本号并将其他信息留在类型名称中,它就起作用了。

【讨论】:

    猜你喜欢
    • 2020-08-14
    • 2023-03-19
    • 2017-07-31
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多