如何在Visual Studio中将自定义默认构建操作与自定义文件类型关联?

7
我有一个语言服务,专门用于自定义文件类型。
此外,我已经在我的MSBuild项目文件中创建了一个自定义目标(构建操作)。但是,我无法找到任何方法来默认关联该构建操作到我的自定义文件扩展名。
例如,如果您添加一个.cs文件,则构建操作默认为“编译”。我希望对我的文件也是如此。即,当添加一个.dsl文件时,我希望构建操作为“生成”,这是我的自定义目标(因此也是构建操作)。
是否有一种方法可以不使用项目向导来实现?
2个回答

8
我认为以下内容可能会帮助您和其他想要执行类似操作的人。
如果您的最终目标是在 .dsl 文件发生任何更改时生成代码/某些内容,则建议您使用“CustomTool”。它是任何项目项上的属性。您编写代码以生成代码,注册 Generator 程序集,然后将 .dsl 文件的 customtool 属性设置为“MyDslToCsGenerator”。
为了在 VS 中注册自定义工具,您需要使用 .Net framework 中提供的“regasm”实用程序针对 MyDslToCsGenerator.dll 运行。
我知道您说过不想使用 Item Template 向导,但如果您可以访问自定义文件模板,则可以设置默认的构建操作(请参阅下面的第一个链接)。
<ProjectItem SubType="" TargetFileName="$fileinputname$.dsl" 
ReplaceParameters="true" ItemType="Embedded Resource" 
CustomTool="MyDslToCsGenerator">MyFile.dsl</ProjectItem>

您也可以使用DTE(projectItem.Properties.Item("ItemType").Value = "MyOwnBuildActionChoice")进行编程,如下面的第二个链接所述。

有用的链接:

  1. 如何为由Visual Studio项目模板创建的项目设置构建操作?
  2. 使用DTE设置自定义构建操作

Vin,你放的第一个链接正是我在寻找的。不确定为什么在搜索时错过了它。非常感谢! - Darien Ford

0

关于“生成”我不太确定,我猜想这是您的“自定义构建操作”,但是,我已经能够使用构建引擎API在构建任务中以编程方式设置任何所需的构建操作。

假设文件的构建操作设置为“编译”,您可以在运行时(构建时间)轻松更改它到您喜欢的任何操作 - 在我的情况下,我将其设置为“嵌入式资源”。这是通过关联一个自定义目标文件来实现的,该文件运行您可以编写的构建任务代码。

如果不清楚,请告诉我,我可以进一步解释,如果您有兴趣的话。


嗨Vin, 我有一个自定义目标,我可以手动将构建任务设置为该目标(即构建操作)。只是当我添加一个新的 .dsl 文件时,我希望它能自动将该构建操作与文件关联起来。 - Darien Ford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接