我目前正在尝试遍历我的所有项目(共享点),以将所有功能指南导入文件中。在那里我想给他们加上项目名称的前缀。我的问题是DTE.Solution.Item和DTE.Solution.Projects.Item(或foreach的枚举数)将不会使用整数作为参数,并且foreach返回一个不可转换为Project的对象。

这是我的代码段:

var hostServiceProvider = (IServiceProvider) Host;
var dte = (DTE) hostServiceProvider.GetService(typeof(DTE));
var projectCount = dte.Solution.Projects.Count;

var projects = new Dictionary<string, string>();

foreach(Project dteProject in dte.Solution)
{
    var dteProject = dte.Solution.Item(i);
    projects.Add(dteProject.Name, dteProject.FullName);
}

好的-代码还可以-调试器不可以!
如果未附加调试器,则在调试上下文中抛出“我的异常”,但模板可以正常运行。

最佳答案

尝试Solution.Projects属性:

<#@ template language="C#" debug="true" hostspecific="true" #>
<#@ assembly name="Microsoft.VisualStudio.Shell.Interop.8.0" #>
<#@ assembly name="EnvDTE" #>
<#@ assembly name="EnvDTE80" #>
<#@ assembly name="VSLangProj" #>
<#@ import namespace="Microsoft.VisualStudio.Shell.Interop" #>
<#@ import namespace="EnvDTE" #>
<#@ import namespace="EnvDTE80" #>
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #>
<#@ output extension=".txt" #>
<#

var hostServiceProvider = (IServiceProvider)this.Host;
var dte = (DTE)hostServiceProvider.GetService(typeof(DTE));

foreach (Project project in dte.Solution)
{
    #>
    <#= project.Name #>
    <#
}

#>

关于c# - 通过C#T4模板中的DTE访问项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12952110/

10-11 21:28