通过反射获取引用项目的类型

时间:2018-08-03 15:41:38

标签: c# .net reflection

通过类的给定[string]名称,我得到了一个类的类型。

// a local (in this startup project) public class works fine
Type test = System.Reflection.TypeInfo.GetType("Learning.Models.Production");
Console.WriteLine(test.Name.ToString()); 
// prints "Production"

现在,在我的解决方案中,我有3个不同的(参考)项目。在每种方法中,我都可以得到它自己的Project类的Types。但是我无法让他们跨项目明智:

// a public class from a referenced project in this solution - returns null
Type test2 = System.Reflection.TypeInfo.GetType("JeffData.Store");
Console.WriteLine(test2.Name.ToString()); 
// System.NullReferenceException (because test2 is null)

进一步测试:

// this is working
Type t1 = System.Reflection.TypeInfo.GetType("System.String");
Console.WriteLine(t1.Name.ToString()); // prints "String"

// but not this (also a public class)
Type t2 = System.Reflection.TypeInfo.GetType("System.Web.HtmlString");
Console.WriteLine(t2.Name.ToString());

// neither that: a public class of another referenced assembly - returns null
Type t3 = System.Reflection.TypeInfo.GetType("Newtonsoft.Json.JsonConvert");
Console.WriteLine(t3.Name.ToString());

我尝试设置其他一些与问题相关的问题(尽管很老)
    [assembly: ComVisible(true)] 没有成功(我还知道除非真正需要,否则我不应该这样做)。

我还尝试将引用属性中的Embed Interop Type设置为true,因为这听起来可能会有所帮助:

enter image description here

所以问题是我还能做些什么才能获得此类引用项目的类型。

编辑:

由于@Hans Passant的评论,我使其具有两种变体形式:

// go via the Assembly
Type test = Assembly.GetAssembly(typeof(JeffData.Store)).GetType("JeffData.Store");

// provide FullyQualifiedTypeName
Type test = System.Reflection.TypeInfo.GetType("JeffData.RecordStore,JeffData");

0 个答案:

没有答案