我有一个为自定义文件类型构建的语言服务。

此外,我还在 MSBuild 项目文件中创建了一个自定义目标(构建操作)。但是,我无法找到任何方法将该构建操作默认关联到我的自定义文件扩展名。

例如,如果添加 .cs 文件,则构建操作默认为“编译”。我想为我做同样的事情。IE。添加 .dsl 文件时,我希望构建操作为“生成”,这是我的自定义目标(因此也是构建操作)。

有没有一种不使用项目向导的方法?

有帮助吗?

解决方案

我认为以下内容可能会对您和其他想做类似事情的人有所帮助。

如果您的最终目标是在 .dsl 文件中发生任何更改时生成代码/某些内容,那么我建议您可以使用“CustomTool”。它是任何项目项的属性。您编写代码来生成代码,注册 Generator 程序集,然后将 .dsl 文件的 customtool 属性设置为“MyDslToCsGenerator”。

为了在 VS 中注册自定义工具,您必须运行“regasm”实用程序,该实用程序可通过 .Net 框架针对 MyDslToCsGenerator.dll 使用


我知道您说过您不想使用项目模板向导,但如果您可以访问自定义文件模板,那么您可以设置默认构建操作(请参阅下面的第一个链接)

<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设置自定义构建操作

其他提示

不知道有关“生成”,我的猜测是你的“自定义生成行动” - 不过,我已经能够通过编程设置任何需要生成操作使用构建引擎API,在构建任务

所以我们可以说,文件是建立操作设置为“编译”,你可以很容易地将其更改为任何你运行时(建立时间)期间喜欢 - 在我的情况下,我将其设置为“嵌入的资源”。这是可能通过关联一个自定义的目标文件,运行你可以写生成任务的代码。

让我知道,如果现在还不清楚,我可以进一步解释,如果你有兴趣。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top