2012-02-08 50 views
5

我有一個Visual Studio包,它通過啓動外部進程(使用System.Diagnostics.Process)並通過標準輸入/輸出與它進行通信來完成其某些工作。目前,我有硬編碼.exe的路徑,這對於實際部署擴展而言顯然不可行。使用擴展名打包和分發.exe的正確方法是什麼? (並且,相關的,一旦我這樣做了,我如何以編程方式發現安裝的文件的路徑。)最好我想將它放到.vsix文件中,以便安裝很容易。將.exe打包成.vsix並從Visual Studio擴展中調用

編輯:我已經把我的上到位桶代碼中的相關部分(也可能是別人使用羅斯林有用):roslyn_process爲了得到什麼,我試圖做一個更好的主意。此代碼在使用AbstractProcessHandler的實現的Visual Studio擴展與使用RoslynProcess的獨立進程之間建立通信。後者隨時瞭解Visual Studio中代碼文件的修改情況以及正在查看哪些代碼文件,因此它能夠使用最新信息進行分析,儘管沒有將其作爲Visual Studio擴展運行,這會增加羅斯林正在編輯所有代碼。

編輯2:使用this answer,我可以得到擴展的目錄。我可以在source.extension.vsixmanifest中加入另一個包,方法是將其添加到內容列表中,類型爲「自定義分機類型」。然後.exe出現在擴展的目錄中。這似乎可能是正確的解決方案,雖然獲取目錄的方式在MSDN中被標記爲我不應該使用的東西。

看起來這可能是做到這一點的最好辦法,即使它看起來hackish的,在這種情況下,一旦我得到一切的工作我會後這是一個答案。

+1

@Kiquenet:對不起,我沒有一個包裝精美的最小的解決方案......但接受的答案是一個班輪。 – perelman 2014-12-12 00:59:55

回答

5

對此的最簡單方法之一是讓您的包DLL具有EXE的項目引用,並使您的入口點類(或EXE中的某個類)公開。然後,你可以這樣寫:

typeof(ExternalProcess).Assembly.Location 

,讓你的延伸通道內的路徑爲EXE。

關於這個的另一個很好的部分是VSIX打包器應該將EXE自動包含到VSIX中,因爲它是一個項目引用。您不必爲EXE的.vsixmanifest放置任何東西。

+0

因爲當我嘗試這個:包括一個EXE(引用NancyFX),它告訴我,NancyFX沒有強大的命名,並且構建失敗。 – 2013-05-07 21:49:20

+0

什麼是「它」?無論如何,在這裏再次提出一個問題比談論這個問題要合適得多。 – 2013-05-08 01:24:04

+0

我沒有問題 - 我有一個警告:當您使用VS 2012 SDK創建VSPackage時,該模板會創建一個啓用強命名的項目。如果您在該項目中提及其他任何內容,則必須以強名稱命名,因爲強命名是傳遞性的。 – 2013-05-08 08:57:07

相關問題