我尝试在NetStandard 1.3类库中使用此代码:
foreach (Type mytype in System.Reflection.Assembly.GetExecutingAssembly().GetTypes()
.Where(mytype => mytype .GetInterfaces().Contains(typeof(myInterface)))) {
//do stuff
}
但引发了编译错误:
Error CS0117 'Assembly' does not contain a definition for 'GetExecutingAssembly'
我已达到What is the equivalent of Assembly.GetEntryAssembly() in .NET Core?,但无法提供帮助。
我知道这项服务可能会在NetStandard 2中提供,但在它发布之前(它现在处于预览状态):
对上述代码进行的修改是什么,以支持NetStandard 1.3
更新
问题不是重复,我在我的问题中提到了这个链接并说它没有帮助。
基于@ mjwills的评论,可能值得补充的是,最好避免使用netstandard 1.5或1.6,因为它们不会与netstandard 2.0兼容{{3} }
https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/#div-comment-136675
我要求一个等效的代码(不一定要使用GetExecutingAssembly):
如何让所有在NetStandard 1.1中实现接口的类达到1.4?
答案 0 :(得分:2)
以下代码在NetStandard1.3中运行,并获取所有实现接口而没有编译错误的类:
Assembly asm = typeof(ICustomeAttribute).GetTypeInfo().Assembly; //thanks to @mjwills for his helpfull comment
var types = asm.DefinedTypes.Where(x=>x.ImplementedInterfaces.Contains(typeof(ICustomeAttribute)));
foreach (var type in types)
{
//do stuff
Console.WriteLine("class name: {0} - {1}",type.Name,type.FullName);
}
<强>说明强>
摘自:Assembly.DefinedTypes Property
DefinedTypes属性与Assembly.GetTypes相当 方法,但DefinedTypes属性返回的集合除外 TypeInfo对象,Assembly.GetTypes方法返回一个数组 输入对象。