ImageOptimizer - 逐步更新 Visual Studio 擴充功能
本指南會顯示新增 Visual Studio 2022 支援所需的所有步驟,同時使用影像優化器擴充功能作為案例研究來維護 Visual Studio 2019 支援。
這是一份完整的指南,其中包含每個步驟的 git 提交記錄連結,但您可以在這裡看到最終的 PR:https://github.com/madskristensen/ImageOptimizer/pull/46
。
步驟 1 - 將項目現代化
請參閱 改進專案。
首先,我們會在各專案的屬性頁面中,將 VSIX 和單元測試專案升級至 .NET 4.7.2:
影像優化器參考了一些舊的自定義 14.* 和 15.* 套件,相反地,我們將安裝 Microsoft.VisualStudio.Sdk
NuGet 套件,以整合我們所需的所有參考。
- <ItemGroup>
- <PackageReference Include="Madskristensen.VisualStudio.SDK">
- <Version>14.0.0-beta4</Version>
- </PackageReference>
- <PackageReference Include="Microsoft.VSSDK.BuildTools">
- <Version>15.8.3247</Version>
- <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
- <PrivateAssets>all</PrivateAssets>
- </PackageReference>
- </ItemGroup>
+ <ItemGroup>
+ <PackageReference Include="Microsoft.VisualStudio.SDK">
+ <Version>16.9.31025.194</Version>
+ </PackageReference>
+ </ItemGroup>
建置專案成功後,我們會收到一些執行緒警告。 我們藉由點擊 ctrl
,.
並使用 IntelliSense 來新增遺漏的執行緒切換行,以修正這些警告。
步驟 2 - 將原始程式碼重構為共享專案
請參閱 共享專案。
支援 Visual Studio 2022 需要新增新的共享專案,其中包含將在 Visual Studio 2019 和 Visual Studio 2022 VSIX 專案之間共用的延伸模組原始程式碼。
將新的共享專案新增至您的方案
將共用項目的參考新增至 VSIX 專案。
將原始碼檔案 (cs、xaml、resx) 移至新的共享專案 ,但下列 除外:
source.extension.vsixmanifest
- 延伸模組元資料檔案(圖示、授權、版本資訊等)
- VSCT 檔案
- 鏈接的檔案
- 需要包含在 VSIX 中的外部工具或程式庫
現在,將所有元數據、VSCT 檔案、連結檔案和外部工具/函式庫移至共用位置,並將其新增回 VSIX 專案作為連結項目。 不要 移除
source.extension.vsixmanifest
。- 針對此項目,我們需要將延伸模組圖示、VSCT 檔案和外部工具移至新的資料夾
ImageOptimizer\Resources
。 將它們複製到共享資料夾,並從 VSIX 專案中移除它們。 - 將它們新增回為連結的項目,如果項目已經是連結的,則可以維持不變(例如授權)。
- 藉由選取每個鏈接檔案並檢查屬性工具窗格,驗證 [建置動作] 和其他屬性在新增的鏈接檔案中正確設定。 針對我們的項目,我們必須設定下列事項:
將
icon.png
[建置動作] 設定為 [Content
],並將 VSIX 中的 [包含] 標示為 [true
將
ImageOptimizer.vsct
[建置動作] 設定為 [VSCTComplile
],並將 [包含在 VSIX] 中設定為 [false
將
Resources\Tools
下檔案的所有建置動作設定為 [Content
],並將 VSIX 中的 [包含] 標示為 [true
此外,
ImageOptimizer.cs
是ImageOptimizer.vsct
的相依性,因此我們必須手動將此相依性新增至 csproj 檔案:- <Content Include="..\SharedFiles\ImageOptimizer.vsct"> - <Link>ImageOptimizer.vsct</Link> - </Content> - <Compile Include="..\SharedFiles\ImageOptimizer.cs"> - <Link>ImageOptimizer.cs</Link> - </Compile> + <VSCTCompile Include="..\SharedFiles\ImageOptimizer.vsct"> + <ResourceName>Menus.ctmenu</ResourceName> + <Generator>VsctGenerator</Generator> + <LastGenOutput>..\SharedFiles\ImageOptimizer.cs</LastGenOutput> + </VSCTCompile> + <Compile Include="..\SharedFiles\ImageOptimizer.cs"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>..\SharedFiles\ImageOptimizer.vsct</DependentUpon> + </Compile>
如果屬性工具視窗無法設定特定的建置動作,您可以依照上述方式手動修改 csproj,並視需要設定建置動作。
- 針對此項目,我們需要將延伸模組圖示、VSCT 檔案和外部工具移至新的資料夾
建置您的項目來驗證您的變更,並修正任何錯誤/問題。 如需常見問題,請參閱 常見問題 一節。
步驟 3 - 新增 Visual Studio 2022 VSIX 專案
請參考 ,新增 Visual Studio 2022 的目標。
將新的 VSIX 專案新增至您的方案。
移除新專案中的所有其他原始程式碼,除了
source.extension.vsixmanifest.
之外新增共用項目的參考。
從 Visual Studio 2019 VSIX 專案新增連結的檔案,並驗證其「建置動作」和「包含在 VSIX」屬性相符。 此外,也會複製您的
source.extension.vsixmanifest
檔案,稍後我們將修改它以支援Visual Studio 2022。進行建置嘗試顯示出我們缺少對
System.Windows.Forms
的參考。 只要將它新增至Visual Studio 2022專案並重建即可。+ <Reference Include="System.Windows.Forms" />
升級
Microsoft.VisualStudio.SDK
和Microsoft.VSSDK.BuildTools
套件參考至 Visual Studio 2022 版本。注意
這些是本指南建立時可用的最新版本。 建議您取得可用的最新版本。
-<PackageReference Include="Microsoft.VisualStudio.SDK" Version="16.0.206" /> +<PackageReference Include="Microsoft.VisualStudio.SDK" Version="17.0.0-preview-1-31216-1036" /> -<PackageReference Include="Microsoft.VSSDK.BuildTools" Version="16.10.32" /> +<PackageReference Include="Microsoft.VSSDK.BuildTools" Version="17.0.63-Visual Studio 2022-g3f11f5ab" />
編輯您的
source.extension.vsixmanifest
檔案,以反映以Visual Studio 2022為目標。設定
<InstallationTarget>
標記以反映 Visual Studio 2022,並指出 amd64 承載:<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.0,18.0)"> <ProductArchitecture>amd64</ProductArchitecture> </InstallationTarget>
修改必要條件,只包含 Visual Studio 2022 和更新版本:
- <Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[15.0,)" DisplayName="Visual Studio core editor" /> + <Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[17.0,)" DisplayName="Visual Studio core editor" />
我們完成了!
現在的建置會生成兩種 VSIX,分別是 Visual Studio 2019 和 Visual Studio 2022。
其他範例
-
ProPower Tools
- PeekF1
- 允許從網頁瀏覽器中快速查看有關所選類別/物件的說明資訊。
- FixMixedTabs
- 掃描您的檔,並以空格取代索引標籤,反之亦然
- PeekF1