Visual studio 以编程方式将不带自定义工具的模板文件添加到项目中

Visual studio 以编程方式将不带自定义工具的模板文件添加到项目中,visual-studio,code-generation,transformation,envdte,customtool,Visual Studio,Code Generation,Transformation,Envdte,Customtool,我们在VisualStudio中的一个项目中添加了T4模板文件(tt和ttinclude文件)的结构 对于这些模板,我们使用自定义转换和处理,我们不希望tt文件的自定义工具设置默认设置为TextTemplatingFileGenerator 为了实现这一目标,我们使用以下代码: ... // logic for the files creation ProjectItem addedItem = this.project.ProjectItems.AddFromFile(fileFullPath

我们在VisualStudio中的一个项目中添加了T4模板文件(tt和ttinclude文件)的结构

对于这些模板,我们使用自定义转换和处理,我们不希望tt文件的自定义工具设置默认设置为TextTemplatingFileGenerator

为了实现这一目标,我们使用以下代码:

... // logic for the files creation
ProjectItem addedItem = this.project.ProjectItems.AddFromFile(fileFullPath);
addedItem.Properties.Item("CustomTool").Value = string.Empty;
问题是,当文件添加到项目中时,代码生成是由默认的自定义工具引起的,即使我们将其从tt文件的属性中删除,由转换引起的错误仍然在错误列表中(类似于视觉故障)

当您保存文件、导航到其他文件或生成项目时,这些错误会立即消失,但我们不希望用户看到这些错误并采取任何其他措施来消除它们

我们尝试使用DTE和DTE2类访问errors集合,如

DTE2 dte2 = (DTE2)this.project.DTE;
dte2.ToolWindows.TaskList;
或者从ErrorListProvider获取它们作为

var provider = new ErrorListProvider(this.ServiceProvider);
var tasks = provider.Tasks;
但是任务列表不包含这些错误——可能是因为它们是转换错误而不是编译错误

更奇怪的是,DTE.Events.TaskListEvents.TaskAdded事件会针对每个转换错误触发,但在任务列表中找不到它们。调用从TaskAdded事件中获取的错误的Delete()方法也不会将它们从错误列表中删除

我们还尝试以编程方式浏览文件或保存tamplates,但它不会像手动操作那样刷新错误列表

在向项目中添加模板时,如何刷新错误列表或告诉Visual Studio不要添加自定义工具设置


另外,我们不想强制客户构建项目(它正在删除错误,但不适用于我们)。

我们找到了一个解决错误的方法

我们使用其基本模板内容(以下内容)生成模板文件,该内容对默认TextTemplatingFileGenerator有效,并且初始代码生成不会导致任何错误

<#@ template  debug="true" hostSpecific="true" #>
<#@ output extension=".cs" #>
<#@ Assembly Name="System.Core" #>
<#@ Assembly Name="System.Windows.Forms" #>
<#@ import namespace="System" #>
<#
    // This is a temporary content valid for the TextTemplatingFileGenerator.
#>

然后,在删除自定义工具设置后,我们将内容替换为真实的内容,所有内容都按预期工作,因为文件已经在项目中,没有自定义工具就没有任何其他转换

这不是最好的解决办法,但我们没有找到更好的办法。我希望这有帮助