Sve*_*ang 9 .net c# reflection gettype .net-assembly
这些类似的问题:操作方法:使用Silverlight中的字符串加载从引用的程序集在运行时类型,在引用的程序集的GetType上一类失败,但是没有答案的作品.
我有一个MVC项目,它从包含普通类型作为字符串的数据库中提取数据.这些类型位于引用的程序集中,而不是MVC项目中.
因此,例如,假设我的Referenced Assembly Name是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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的MVC项目中,我可以调用它而不需要将程序集作为字符串名称.这可能还是我总是需要汇编名称?
Jon*_*mit 23
也许当时没有加载引用的程序集.另外,我从你的问题中了解到你没有完整的类型名称,只有类名.
你应该沿着这条线尝试一下:
Type type = Assembly.Load("YourAssemblyName").GetTypes().First(t => t.Name == "ShortTypeName");
Run Code Online (Sandbox Code Playgroud)
希望我理解正确.
小智 10
对于第一个问题,你可以做类似的事情
Type t = AppDomain.CurrentDomain.GetAssemblies()
.Where(a => a.FullName == "MyFramework")
.SelectMany(a => a.GetTypes())
.Where(t => t.Name == "Car")
.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
我不确定你的第二个问题是什么意思.