簡體   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