gpt4 book ai didi

c# - 使用 EnvDTE 收集项目中的用户类列表

转载 作者:太空狗 更新时间:2023-10-29 17:46:42 27 4
gpt4 key购买 nike

我在使用 EnvDTE 创建一种方法来列出我的项目中的所有类时遇到问题,以便使用 T4(基于命名约定)对接口(interface)进行模板化,并且那里的文档似乎都没有描述怎么做。我开始于:

<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ output extension=".cs" #>
<#@ Assembly name="EnvDTE" #>
<#@ Assembly name="System.Core" #>
<#@ import namespace="EnvDTE" #>
<#@ Import Namespace="System.Linq" #>
<#@ Import Namespace="System.Collections.Generic" #>
<#
var env = (DTE)((IServiceProvider)this.Host)
.GetService(typeof(EnvDTE.DTE));

...然后我开始横着走。我能够识别我的项目,但我无法将项目中的类收集到我想要过滤到平面列表中以为其创建接口(interface)。

我该怎么做?我只想要我项目中的类。

最佳答案

由于您使用的是 T4,我建议您查看 tangible T4 Editor .在他们的画廊中有一个免费的可重复使用的模板“有形的 Visual Studio Automation Helper”。使用此模板,您可以轻松找到代码类等(请参阅我对这篇文章的回答 Design Time Reflection)。

如果你想自己做,你应该继续这样:

    var project = env.ActiveDocument.ProjectItem.ContainingProject;
foreach(EnvDTE.CodeElement element in project.CodeModel.CodeElements)
{
if (element.Kind == EnvDTE.vsCMElement.vsCMElementClass)
{
var myClass = (EnvDTE.CodeClass)element;
// do stuff with that class here
}
}

我删除了必要的递归。一个 CodeElement 可以包含其他 CodeElement。但这样更容易阅读。

关于c# - 使用 EnvDTE 收集项目中的用户类列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14346412/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com