通过类的给定[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,因为这听起来可能会有所帮助:
所以问题是我还能做些什么才能获得此类引用项目的类型。
编辑:
由于@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");