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

本文关键字:Visual 并从 Studio 扩展 调用 exe vsix | 更新日期: 2023-09-27 18:23:36

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

EDIT:我已经将代码的相关部分放在BitBucket(它可能对其他使用Roslyn的人有用):Roslyn_process上,以便更好地了解我要做的事情。此代码使用AbstractProcessHandler的实现在Visual Studio扩展和使用RoslynProcess的单独进程之间建立通信。后者会随时了解对Visual Studio中的代码文件所做的修改以及正在查看的代码文件,因此它能够使用最新信息进行分析,尽管它不是作为Visual Studio扩展运行的,这将对正在编辑的所有代码施加Roslyn的限制。

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

这似乎是最好的方法,尽管它看起来很粗糙,在这种情况下,我会在一切正常后将其作为答案发布。

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

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

typeof(ExternalProcess).Assembly.Location

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

另一个很好的部分是,VSIX打包程序应该自动将EXE包含到VSIX中,因为它是一个项目引用。你根本不需要在.vsixmanifest中为EXE放入任何内容。