CodeType CodeProperty внезапно исчез

Я занят созданием сборки, которая будет собирать информацию CodeModel, которая, в свою очередь, используется для генерации кода с шаблоном T4.

Я борюсь с CodeModel из-за отсутствия хорошей информации. Я нашел несколько книг, описывающих CodeModel, но только истинные основы. Не нашел подробной документации.

На прошлой неделе я создал упомянутую сборку, и следующая конструкция работала более 4 дней.

    /// <summary>
    /// The CodeType of the property
    /// </summary>
    public CodeType CodeType
    {
        get
        {
            if (!m_CodeTypeInitialized)
            {
                CodeTypeRef codeTypeRef = CodeProperty.Type;
                m_CodeType = codeTypeRef.CodeType;

                m_CodeTypeInitialized = true;
            }

            return m_CodeType;
        }
    }

Вчера внезапно эта конструкция больше не возвращает CodeType. Теперь я изменил код на этот

    /// <summary>
    /// The CodeType of the property
    /// </summary>
    public CodeType CodeType
    {
        get
        {
            if (!m_CodeTypeInitialized)
            {
                if (CodeProperty.IsCodeType)
                {
                    CodeTypeRef codeTypeRef = CodeProperty.Type;
                    m_CodeType = codeTypeRef.CodeType;
                }

                m_CodeTypeInitialized = true;
            }

            return m_CodeType;
        }
    }

Это больше не вызывает исключение, но результат всегда равен нулю. Я потерялся. Что может привести к тому, что CodeProperty внезапно потеряет свой CodeType?

Мне действительно нужен CodeType, потому что много кода зависит от его информации.

1 ответ

Я смог создать такую ​​работу вокруг. Это не приятно, но работает нормально:

        private FileCodeModel m_FileCodeModel;

    /// <summary>
    /// The FileCodeModel the entity of this property is found in.
    /// </summary>
    public FileCodeModel FileCodeModel
    {
        get
        {
            if (m_FileCodeModel == null)
            {
                m_FileCodeModel = EntityMetadata.FileCodeModel;
            }

            return m_FileCodeModel;
        }
    }

    private Project m_Project;

    /// <summary>
    /// The project this properties entity is contained in.
    /// </summary>
    public Project ContainingProject
    {
        get
        {
            if (m_Project == null)
            {
                m_Project = FileCodeModel.Parent.ContainingProject;
            }

            return m_Project;
        }
    }

    private CodeModel m_CodeModel;

    /// <summary>
    /// The CodeModel for the properties entity.
    /// </summary>
    public CodeModel CodeModel
    {
        get
        {
            if (m_CodeModel == null)
            {
                m_CodeModel = ContainingProject.CodeModel;
            }

            return m_CodeModel;
        }
    }

    /// <summary>
    /// De CodeType van de property
    /// </summary>
    public CodeType CodeType
    {
        get
        {
            if (!m_CodeTypeInitialized)
            {
                if (CodeProperty.IsCodeType)
                {
                    CodeTypeRef codeTypeRef = CodeProperty.Type;
                    m_CodeType = codeTypeRef.CodeType;
                }
                else
                {
                    m_CodeType = CodeModel.CodeTypeFromFullName(CodeProperty.Type.AsFullName);
                }

                m_CodeTypeInitialized = true;
            }

            return m_CodeType;
        }
    }
Другие вопросы по тегам