7

我有一个 Visual Studio 包,它通过启动一个外部进程(使用System.Diagnostics.Process)并通过标准输入/输出与其通信来完成它的一些工作。目前,我有.exe硬编码的路径,这显然不适用于实际部署扩展。使用扩展打包和分发的正确方法是什么.exe?(并且,相关的,一旦我这样做了,我如何以编程方式发现已安装.exe文件的路径。)最好我想将它放入.vsix文件中,以便安装。

编辑:我已将我的代码的相关部分放在 BitBucket 上(它可能对使用 Roslyn 的其他人有用):roslyn_process以便更好地了解我正在尝试做什么。此代码AbstractProcessHandler使用RoslynProcess. 后者会随时了解对 Visual Studio 中代码文件的修改以及正在查看哪个代码文件,因此它能够使用最新信息进行分析,尽管它不是作为 Visual Studio 扩展运行的,这会施加以下限制Roslyn 关于正在编辑的所有代码。

编辑 2:使用这个答案,我可以获得扩展的目录。source.extension.vsixmanifest我可以通过将其作为“自定义扩展类型”类型添加到内容列表中来包含另一个包。然后.exe出现在扩展的目录中。这似乎是正确的解决方案,尽管获取目录的方式在 MSDN 中被标记为我不应该使用的东西。

看起来这可能是最好的方法,即使它看起来很hackish,在这种情况下,一旦我一切正常,我会发布这个作为答案。

4

1 回答 1

7

最简单的方法之一是让您的包 DLL 具有对 EXE 的项目引用,并使您的入口点类(或 EXE 中的某些类)是公共的。然后你可以写:

typeof(ExternalProcess).Assembly.Location

它为您提供了扩展路径中 EXE 的路径。

另一个很好的部分是 VSIX 打包程序应该自动将 EXE 包含到 VSIX 中,因为它是一个项目引用。对于 EXE,您无需在 .vsixmanifest 中添加任何内容。

于 2012-02-18T01:21:27.237 回答