我有一个自定义脚本语言和一个编译器(用C编写的EXE),可以将该语言转换为C#代码。我想将脚本编译器作为解决方案中脚本文件的自定义工具连接起来,让它生成C#代码。
我见过articles and tutorials online,他们都有生成COM接口并使用注册表和GAC注册自定义DLL,我真的不想处理所有这些。
是否有一个包装或黑客或第三方插件可以让这更容易?就像有一种方法可以将批处理脚本作为自定义工具运行,并且从stdout生成后面的代码,我可以将文件从编译器传输到stdout。
答案 0 :(得分:1)
首先,我知道你说你不想通过MSFT方式注册,但我建议你重新考虑一下。详细信息如下:http://msdn.microsoft.com/en-us/library/vstudio/bb166527.aspx
现在我们已经解决了这个问题,我建议你:
将您的exe放在固定位置(最佳位置可能在您的解决方案或存储库的根目录中)。接下来,手动运行您的工具一次,这样您就可以获得.cs文件或生成的任何内容,以便将它们添加到您的解决方案中。这样C#编译器就知道它们在那里,你只需点击构建按钮就可以构建文件。
接下来,创建一个预构建事件(在项目属性,构建事件选项卡下),使用适当的命令行参数调用您的exe,以使其执行其操作(生成新的cs文件)。我建议您编辑exe以一次获取多个文件,以使您的预构建命令更简单。 (这是将文件放在sln或repo目录中有用的地方,因为您可以使用VS宏来获取exe和要读入的文件的绝对路径。)
现在发生了什么,是在msbuild被调用之前(但在你点击构建之后),你的脚本(或exe)将运行以生成新的输出文件。由于msbuild尚未启动,您可以将任何解决方案文件更改为您的内容,并且更改将由msbuild和最终(可能一旦构建完成)VS.
注意: 我从来没有能够在第一次尝试时使用构建事件,它通常会抛出一个错误,该错误将显示在VS错误/警告窗口中。我通常将整个错误复制到记事本(或scite)中,并使用参数将其编辑到实际的命令行。然后我打开一个命令shell并尝试执行它。这里的错误通常更有帮助,你可以调整直到你把它弄好并将更改复制回VS.