繁体   English   中英

将.exe打包到.vsix中,然后从Visual Studio扩展中调用

[英]Package .exe into .vsix and call from Visual Studio extension

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

编辑:我将代码的相关部分放在BitBucket上(它可能对使用Roslyn的其他人有用): roslyn_process ,以便更好地了解我要做什么。 此代码在使用AbstractProcessHandler的实现的Visual Studio扩展与使用RoslynProcess的单独的进程之间建立通信。 后者会随时了解有关Visual Studio中代码文件的修改以及正在查看哪个代码文件的信息,因此尽管未作为Visual Studio扩展运行,但它仍可以使用最新信息进行分析,这会带来以下限制: Roslyn在所有正在编辑的代码上。

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

即使看起来似乎有点骇人听闻,这似乎也是执行此操作的最佳方法,在这种情况下,一旦一切正常,我将把它作为答案发布。

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

typeof(ExternalProcess).Assembly.Location

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

另一个很好的方面是VSIX打包程序应该将EXE自动包含在VSIX中,因为它是项目参考。 您无需在EXE的.vsixmanifest中放置任何内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM