c# - 通过将类名作为字符串提供来获取引用程序集中的类型?

标签 c# .net reflection .net-assembly gettype

这些是类似的问题:How-to: Load a type from a referenced assembly at runtime using a string in Silverlight , GetType on a class in a referenced assembly fails但是这两个答案都不起作用。

我有一个 MVC 项目,它从数据库中提取数据,其中包括作为字符串的普通类型。这些类型在引用的程序集中,而不是在 MVC 项目中。

例如,假设我的引用程序集名称是 MyFramework 和普通类型名称 Car,完整的类型名称可以是 MyFramework.Cars.CarMyFramework.Vehicles.Cars.Car 或其他变体。我所拥有的只是引用的程序集名称和普通类名称作为字符串。无论完整的类型名称如何,我如何才能获得类型?

最后,我能否在调用 GetType() 的引用程序集中编写一个函数并在 MvC 项目中使用它,这样我就可以放弃包含程序集名称?我想删除已知的程序集名称,所以我想我可以在引用的程序集中编写一个 Util,例如:

namespace MyFramework //the referenced assembly
{
  public static class TypeUtil
  {
    public static Type GetFrameworkType(string typeName)
    {
        return Type.GetType(typeName);
    }
  }
}

然后在我的 MVC 项目中我可以调用它而不需要程序集作为字符串名称。这可能吗?还是我总是需要程序集名称?

最佳答案

可能当时没有加载引用的程序集。另外,我从你的问题中了解到你没有完整的类型名称,只有类名。
那么你应该沿着这条线尝试一些东西:

Type type = Assembly.Load("YourAssemblyName").GetTypes().First(t => t.Name == "ShortTypeName");

希望我理解正确。

关于c# - 通过将类名作为字符串提供来获取引用程序集中的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11994057/

相关文章:

c# - 使用 EPPLUS 从列表导出到 Excel

c# - 如何获取本地网络计算机列表?

.net - WPF 将多个控件绑定(bind)到不同的数据上下文

Java 将传递给方法的对象转换为其原始类型

c# - dapper:#tempDB 已创建但在下一个查询中不可用

c#/.net项目如何保存/组织数据库查询

c# - 防止后续服务调用的协商握手

.net - 将 NLog 写入控制台

c# - 如何确定属性是否为 C# 中的用户定义类型?

c# - 使用反射获取类方法