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

这些是类似的问题: 操作方法:在运行时使用Silverlight中的字符串从引用的程序集加载类型,引用的程序 集中的类上的GetType失败,但两个答案都不起作用。

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

例如,假设我的Referenced程序集名称是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"); 

希望我理解正确。

对于第一个问题,你可以做类似的事情

 Type t = AppDomain.CurrentDomain.GetAssemblies() .Where(a => a.FullName == "MyFramework") .SelectMany(a => a.GetTypes()) .Where(t => t.Name == "Car") .FirstOrDefault(); 

我不确定你的第二个问题是什么意思。