C# CodeProperty';s的代码类型突然消失了
我正忙于创建一个程序集,该程序集将收集代码模型信息,这些信息反过来用于生成带有T4模板的代码 由于缺乏良好的信息,我正在与CodeModel进行斗争。我找到了几本描述代码模型的书,但只介绍了真正的基础知识。没有找到深入的文档 在过去的一周里,我创建了上面提到的组件,下面的构造在超过4天的时间里运行良好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
/// <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_码型;
}
}
我刚刚意识到,只有当我正在寻找的类型包含在同一个项目中时,这才有效。而且它也没有真正回答这个问题:-(