我目前正在尝试遍历我的所有项目 (sharepoint) 以将所有功能指南放入一个文件中。我想在它们前面加上项目名称。我的问题是 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/