我有一个为自定义文件类型构建的语言服务。
此外,我在MSBuild项目文件中创建了一个自定义目标(构建操作)。但是,我无法找到任何方法将该构建操作默认关联到我的自定义文件扩展名。
例如,如果添加.cs文件,则构建操作默认为“compile”。我想为我做同样的事情。 即在添加.dsl文件时,我希望构建操作为“Generate”,这是我的自定义目标(因此构建操作)。
有没有使用项目向导的方法?
答案 0 :(得分:6)
我认为以下内容可能对您和其他想要做类似事情的人有所帮助。
如果您的最终目标是在.dsl文件中发生任何更改时生成代码/某些内容,那么我建议您使用“CustomTool”。它是任何项目项目的属性。您编写代码来生成代码,注册Generator程序集,然后将.dsl文件的customtool属性设置为“MyDslToCsGenerator”。
要在VS中注册自定义工具,您必须运行“regasm”实用程序,针对MyDslToCsGenerator.dll提供.Net框架
我知道您说您不想使用“项目模板”向导,但如果您可以访问自定义文件模板,则可以设置默认构建操作(请参阅下面的第1个链接)
<ProjectItem SubType="" TargetFileName="$fileinputname$.dsl"
ReplaceParameters="true" ItemType="Embedded Resource"
CustomTool="MyDslToCsGenerator">MyFile.dsl</ProjectItem>
您也可以使用DTE(projectItem.Properties.Item("ItemType").Value = "MyOwnBuildActionChoice"
)以编程方式执行此操作,如下面的第二个链接中所述
有用的链接:
答案 1 :(得分:0)
不确定“生成”,我猜是你的“自定义构建操作” - 但是,我已经能够在构建任务中使用构建引擎API以编程方式设置任何所需的构建操作。
因此,假设文件的构建操作设置为'compile',您可以在运行时(构建时)将其轻松更改为您喜欢的任何内容 - 在我的情况下,我将其设置为'Embedded Resource'。这可以通过关联自定义目标文件来实现,该文件运行您可以编写的构建任务代码。
如果您不感兴趣,请告诉我,如果您有兴趣,我可以进一步解释。