c# - 在 C# T4 模板中通过 DTE 访问项目

标签 c# visual-studio-2012 t4 envdte

我目前正在尝试遍历我的所有项目 (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/

相关文章:

c# - 一个很好的 .Net 评级 UI 设计

c# - 向 ProcessStartInfo 添加附加参数

windows-8 - 在哪里可以找到 Windows 8 上 Visual Studio 2012 中的设备面板?

c# - AspCore T4 生成添加对 System.Runtime.DLL 的引用

c# - 如何获取 EF5.0 EntityGenerator 中实体的架构和表名?

c# - NUnit:是否可以从我的应用程序中引用类?

c# - 在 ContinueWith 中重新抛出先前的异常

windows-8 - Visual Studio 11 开发预览版 : Cannot delete thumbs. db

c# - 如何使用 Xamarin for Visual Studio 在真实的 Android 设备上进行调试?

.net - 通过 TextTransform.exe 运行模板时使用 $(SolutionDir)