C# 当尝试获取表达式主体成员的属性访问修饰符时,EnvDTE正在抛出ComException

C# 当尝试获取表达式主体成员的属性访问修饰符时,EnvDTE正在抛出ComException,c#,envdte,comexception,C#,Envdte,Comexception,我有一个VS扩展项目 在这个项目中,我需要遍历所有类,并使用公共getter查找所有公共属性 代码看起来像 private static IEnumerable<IntellisenseProperty> GetProperties(CodeElements props, HashSet<string> traversedTypes, HashSet<string> references = null) {

我有一个VS扩展项目

在这个项目中,我需要遍历所有类,并使用公共getter查找所有公共属性

代码看起来像

        private static IEnumerable<IntellisenseProperty> GetProperties(CodeElements props, HashSet<string> traversedTypes, HashSet<string> references = null)
        {
            return from p in props.OfType<CodeProperty>()
                   where !p.Attributes.Cast<CodeAttribute>().Any(a => "System.Runtime.Serialization.IgnoreDataMemberAttribute" == a.FullName || "Newtonsoft.Json.JsonIgnoreAttribute" == a.FullName)
                   where vsCMAccess.vsCMAccessPublic == p.Access && p.Getter != null && !p.Getter.IsShared && vsCMAccess.vsCMAccessPublic == p.Getter.Access
                   select new IntellisenseProperty
                   {
                       Name = GetName(p),
                       Type = GetType(p.Parent, p.Type, traversedTypes, references),
                       Summary = GetSummary(p),
                       JsonName = GetJsonName(p)
                   };
        }
在到达目的地之前都很有效

public string WindowsUserID => $"{Domain}\\{UserName}"; 
它在vsCMAccess.vsCMAccessPublic==p.Getter.Access上爆炸,带有COMException

堆栈跟踪 在System.Runtime.InteropServices.Marshal.ThroweExceptionForhr内部(Int32 errorCode,IntPtr errorInfo) 在Microsoft.VisualStudio.LanguageServices.Implementation.Utilities.Exceptions.ThrowEFail()上 位于Microsoft.VisualStudio.LanguageServices.CSharp.CodeModel.CSharpCodeModelService.GetDefaultAccessibility(SyntaxNode节点) 位于Microsoft.VisualStudio.LanguageServices.CSharp.CodeModel.CSharpCodeModelService.GetAccess(SyntaxNode节点) 在Microsoft.VisualStudio.LanguageServices.Implementation.CodeModel.InternalElements.CodeAccessorFunction.get_Access()中 在EnvDTE.CodeFunction.get_Access()中 在C:\code\GitHub\TypeScriptDefinitionGenerator\src\Generator\IntellisenseParser.cs中的TypeScriptDefinitionGenerator.IntellisenseParser.IsPublic(CodeFunction cf)处:第190行

HResult=0x80004005

调用COM组件时返回消息“Error HRESULT E_FAIL”

来源“EnvDTE”

TargetSite{EnvDTE.vsCMAccess get_Access()}

发生这种情况的唯一属性是所有表达式体成员

这是环境问题吗


如果这是一个环境问题…我如何/在哪里报告它。

好的,我在Roslyn中添加了一个bug并进行了修复。

计划在15.3版本中发布。

有数千种不同的ComeException。没有任何理由强迫我们猜测您得到了哪一种。至少,HResult,您看到的任何消息。添加了异常信息,请访问ss拒绝了…但真的没有说什么…输入代码是有效的代码,因此EnvDTE不应该爆炸。不要试图用理解TypeScript代码的解析器来理解C代码。它们是非常不同的语言。如果出于某种原因,你认为这是合理的,或者只是对错误报告的质量不满意,然后只需单击GitHub项目中的New Issue按钮。EnvDTE与TypeScript有什么关系?这里的所有代码都是C#。EnvDTE不是GitHub项目。
public string WindowsUserID => $"{Domain}\\{UserName}";