我有一个Visual Studio程序包,通过启动外部进程(使用System.Diagnostics.Process
)并通过标准输入/输出与其进行通信来完成其部分工作。目前,我有.exe
硬编码的路径,这显然不适用于实际部署扩展。使用扩展程序打包和分发.exe
的正确方法是什么? (并且,相关的,一旦我这样做,我如何以编程方式发现已安装的.exe
文件的路径。)最好我想将其放入.vsix
文件中,以便安装很容易。< / p>
编辑:我已将我的代码的相关部分放在BitBucket上(对于使用Roslyn的其他人可能有用):roslyn_process以便更好地了解我的内容我想做。此代码使用AbstractProcessHandler
的实现和使用RoslynProcess
的单独进程在Visual Studio扩展之间建立通信。后者随时了解Visual Studio中代码文件的修改以及正在查看的代码文件,因此它能够使用最新信息进行分析,尽管不能作为Visual Studio扩展运行,这将限制罗斯林正在编辑所有代码。
编辑2:使用this answer,我可以获取扩展程序的目录。我可以在source.extension.vsixmanifest
中添加另一个包,方法是将其添加到内容列表中,作为“自定义扩展类型”类型。然后.exe
出现在扩展程序的目录中。这似乎是正确的解决方案,虽然获取目录的方式在MSDN中被标记为我不应该使用的东西。
看起来这可能是做到这一点的最佳方式,即使它看起来像是hackish,在这种情况下,一旦我把所有东西都运转起来,我会把它作为答案发布。
答案 0 :(得分:6)
最简单的方法之一是让您的包DLL具有对EXE的项目引用,并使您的入口点类(或EXE中的某些类)成为公共类。然后你可以写:
typeof(ExternalProcess).Assembly.Location
为您提供扩展路径中EXE的路径。
关于这一点的另一个好处是VSIX打包器应该自动将EXE包含到VSIX中,因为它是项目引用。您不必在.vsixmanifest中为EXE添加任何内容。