![](/img/trans.png)
[英]Any way to manually trigger a Test Discovery pass in VS2019 from a VSPackage?
[英]Best Way to replicate ClCompile/Link targets to elimiate to eliminate 2 pass Msbuild VS2019 plugin
我正在嘗試消除觸發第二次 MSBuild 傳遞的 Visual Studio 2019 插件。
給定:自定義構建任務從 *.bla 文件創建 *.cpp 模塊的構建流程。 然后將它們與其他 *.cpp 模塊鏈接以創建 EXE。
處理 *.bla 文件所需的信息要求運行生成的 exe。 真正的先有雞還是先有蛋的問題。 當前的解決方案是自定義任務檢測 exe 何時不存在,並創建.bla-> .cpp 任務的存根版本,然后用於允許鏈接器解析符號並創建“存根模式”exe。 當前的 Visual Studio 插件檢測存根的創建時間並在構建過程中觸發第二次運行,因此 bla 處理器可以運行 exe 以提供正確處理 bla 文件所需的數據。 聽起來很有趣吧?
今天我們從 *.bla -> *.cpp -> *.obj 開始,*.bla 項目剛剛合並到 @(ClCompile) 項目列表中。 @(blaItems) -> @(CppBlaItems) 添加到@(ClCompile) 第一輪創建一個 STUB user.exe,然后在第二輪中由“bla”文件任務使用。
所有這些最初都是在 Visual Studio 6.0 天創建的。 然后移植到VS2013和更高版本的VS2019。 插件技術和構建技術已經改進到我相信 MSBUILD 已經足夠成熟,可以淘汰插件了。
但是 MSBUILD 有一個規則,即一個目標只執行一次。
所以我需要創建新的目標來復制.bla-> .cpp->*.obj 上的 ClCompile 和 Link 目標行為
我已經完成了大約 80% 的.targets/ .xml/*.props 三重奏,但不知道復制 ClCompile/Link 的最佳方式。
目前我正在考慮創建新目標 BlaStubCompile BlaStubLink 並導入 ClCompile 和 Link 已導入的文件。 但我不確定這是一個好主意。 這就是我今天要研究的路徑。 以為我會伸出手來看看我是否缺少一些直觀明顯的替代解決方案。
如果可能的話,我會避免復制 Microsoft 提供的 ClCompile 和 Link 目標,因為目標如有更改,恕不另行通知。 此問題的風險很小,但如果您不維護自己的副本,則風險可能為零。
在MSBuild 任務文檔的備注部分有以下注釋:
與使用Exec 任務啟動 MSBuild.exe 不同,此任務使用相同的 MSBuild 進程來構建子項目。 可以跳過的已構建目標列表在父構建和子構建之間共享。
一種可能的方法是如果“存根模式”exe 不存在則運行目標,並且目標將使用 Exec 任務在其項目上運行 MSBuild 以構建“存根模式”exe。 因為它是一個單獨的進程,所以已經構建的目標列表不會與父構建共享。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.