C# CodeProperty';s的代码类型突然消失了

C# CodeProperty';s的代码类型突然消失了,c#,.net,visual-studio,t4,c#-code-model,C#,.net,Visual Studio,T4,C# Code Model,我正忙于创建一个程序集,该程序集将收集代码模型信息,这些信息反过来用于生成带有T4模板的代码 由于缺乏良好的信息,我正在与CodeModel进行斗争。我找到了几本描述代码模型的书,但只介绍了真正的基础知识。没有找到深入的文档 在过去的一周里,我创建了上面提到的组件,下面的构造在超过4天的时间里运行良好 /// <summary> /// The CodeType of the property /// </summary> public C

我正忙于创建一个程序集,该程序集将收集代码模型信息,这些信息反过来用于生成带有T4模板的代码

由于缺乏良好的信息,我正在与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;
        }
    }
//
///属性的代码类型
/// 
公共代码类型代码类型
{
得到
{
如果(!m_CodeTypeInitialized)
{
CodeTypeRef CodeTypeRef=CodeProperty.Type;
m_CodeType=codeTypeRef.CodeType;
m_CodeTypeInitialized=真;
}
返回m_码型;
}
}
昨天,这个构造突然不再返回代码类型。我现在把代码改成了这个

    /// <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;
        }
    }
//
///属性的代码类型
/// 
公共代码类型代码类型
{
得到
{
如果(!m_CodeTypeInitialized)
{
if(CodeProperty.IsCodeType)
{
CodeTypeRef CodeTypeRef=CodeProperty.Type;
m_CodeType=codeTypeRef.CodeType;
}
m_CodeTypeInitialized=真;
}
返回m_码型;
}
}
这不再导致异常,但结果始终为“null”。我迷路了。什么会导致CodeProperty突然失去其代码类型


我真的需要代码类型,因为很多代码都依赖于它的信息。

我能够在这样的环境中创建一个作品。虽然不好,但效果很好:

        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;
        }
    }
private FileCodeModel m_FileCodeModel;
/// 
///在中找到此属性的实体的FileCodeModel。
/// 
公共文件编码模型文件编码模型
{
得到
{
if(m_FileCodeModel==null)
{
m_FileCodeModel=EntityMetadata.FileCodeModel;
}
返回m_FileCodeModel;
}
}
私人项目m_项目;
/// 
///此属性实体包含在其中的项目。
/// 
包含项目的公共项目
{
得到
{
如果(m_项目==null)
{
m_Project=FileCodeModel.Parent.ContainingProject;
}
返回m_项目;
}
}
私有码模型m_码模型;
/// 
///属性实体的代码模型。
/// 
公共代码模型代码模型
{
得到
{
if(m_CodeModel==null)
{
m_CodeModel=ContainingProject.CodeModel;
}
返回m_码模型;
}
}
/// 
///De代码类型van De property
/// 
公共代码类型代码类型
{
得到
{
如果(!m_CodeTypeInitialized)
{
if(CodeProperty.IsCodeType)
{
CodeTypeRef CodeTypeRef=CodeProperty.Type;
m_CodeType=codeTypeRef.CodeType;
}
其他的
{
m_CodeType=CodeModel.CodeTypeFromFullName(CodeProperty.Type.AsFullName);
}
m_CodeTypeInitialized=真;
}
返回m_码型;
}
}

我刚刚意识到,只有当我正在寻找的类型包含在同一个项目中时,这才有效。而且它也没有真正回答这个问题:-(