EnvDTE генерирует исключение ComException при попытке получить модификатор доступа к свойству члена с выражением

У меня есть проект расширения VS.

В проекте мне нужно пройти через все классы и найти все публичные свойства с публичными получателями.

код выглядит так

        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)
                   };
        }

следующий вход вызывает проблему

sing System.ComponentModel.DataAnnotations;
using Microsoft.AspNet.Identity;
using Newtonsoft.Json;
using System.Runtime.Serialization;

namespace ClaimsManager.Models.UI
{
    public class WindowsAccount
    {     
        [JsonProperty("Test")]
        public string UserName { get; set; }
        [Required]
        public string Domain { get; set; }

        public string WindowsUserID => $"{Domain}\\{UserName}"; 

        [JsonIgnore]
        public UserLoginInfo UserLogin => new UserLoginInfo("Windows", WindowsUserID);


    }
}

прекрасно работает, пока не доберется до

public string WindowsUserID => $"{Domain}\\{UserName}"; 

где это взрывается на vsCMAccess.vsCMAccessPublic == p.Getter.Access с COMException.

трассировка стека в System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo) в Microsoft.VisualStudio.LanguageServices.Implementation.Utilities.Exceptions.ThrowEFail() в Microsoft.VisualStudio.Lodeagelault.ModeHe fCharpSecCS.CS Узел SyntaxNode) в узле Microsoft.VisualStudio.LanguageServices.CSharp.CodeModel.CSharpCodeModelService.GetAccess(узел SyntaxNode) в узле Microsoft.VisualStudio.LanguageServices.Implementation.CodeModel.InternalElements.CodeAccessEgn.EccessEccessFase () IntellisenseParser.IsPublic(CodeFunction cf) в C:\code\GitHub\TypeScriptDefinitionGenerator\src\Generator\IntellisenseParser.cs: строка 190

HResult = 0x80004005

Сообщение "Ошибка HRESULT E_FAIL была возвращена от вызова к компоненту COM

Источник "EnvDTE"

TargetSite {EnvDTE.vsCMAccess get_Access ()}

все свойства, на которых это происходит, - все члены с выраженным выражением

Является ли проблема EnvDTE?

Если это проблема EnvDTE.... как / где мне сообщить об этом.

1 ответ

Хорошо, я поставил ошибку и исправил в Roslyn.... это запланировано на выпуск 15.3

Другие вопросы по тегам