这些是类似的问题: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.Car
或 MyFramework.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/