C# 当尝试获取表达式主体成员的属性访问修饰符时,EnvDTE正在抛出ComException
我有一个VS扩展项目 在这个项目中,我需要遍历所有类,并使用公共getter查找所有公共属性 代码看起来像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) {
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}";