在NetStandard 1.3中:我如何获得实现接口的所有类以避免错误CS0117'汇编'不包含定义

时间:2017-07-05 11:03:09

标签: c# reflection .net-assembly .net-standard

我尝试在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?

1 个答案:

答案 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方法返回一个数组   输入对象。