共用方式為


ImageOptimizer - 逐步更新 Visual Studio 擴充功能

本指南會顯示新增 Visual Studio 2022 支援所需的所有步驟,同時使用影像優化器擴充功能作為案例研究來維護 Visual Studio 2019 支援。
這是一份完整的指南,其中包含每個步驟的 git 提交記錄連結,但您可以在這裡看到最終的 PR:https://github.com/madskristensen/ImageOptimizer/pull/46

在本指南結尾,我們也有額外範例

步驟 1 - 將項目現代化

請參閱 改進專案

git commit e052465

首先,我們會在各專案的屬性頁面中,將 VSIX 和單元測試專案升級至 .NET 4.7.2:

Framework 版本更新

影像優化器參考了一些舊的自定義 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 專案之間共用的延伸模組原始程式碼。

  1. 將新的共享專案新增至您的方案

    git commit abf249d

    新增共用專案

  2. 將共用項目的參考新增至 VSIX 專案。

    git commit e8e941e

    新增共用項目參考

  3. 將原始碼檔案 (cs、xaml、resx) 移至新的共享專案 ,但下列 除外:

    • source.extension.vsixmanifest
    • 延伸模組元資料檔案(圖示、授權、版本資訊等)
    • VSCT 檔案
    • 鏈接的檔案
    • 需要包含在 VSIX 中的外部工具或程式庫

    git commit f31f051

    將檔案移至共享專案

  4. 現在,將所有元數據、VSCT 檔案、連結檔案和外部工具/函式庫移至共用位置,並將其新增回 VSIX 專案作為連結項目。 不要 移除 source.extension.vsixmanifest

    git 提交 73ba920 - 移動檔案

    git 提交 d5e36b2 - 新增外部工具/函式庫

    1. 針對此項目,我們需要將延伸模組圖示、VSCT 檔案和外部工具移至新的資料夾 ImageOptimizer\Resources。 將它們複製到共享資料夾,並從 VSIX 專案中移除它們。
    2. 將它們新增回為連結的項目,如果項目已經是連結的,則可以維持不變(例如授權)。
    3. 藉由選取每個鏈接檔案並檢查屬性工具窗格,驗證 [建置動作] 和其他屬性在新增的鏈接檔案中正確設定。 針對我們的項目,我們必須設定下列事項:
      • icon.png [建置動作] 設定為 [Content],並將 VSIX 中的 [包含] 標示為 [true

      • ImageOptimizer.vsct [建置動作] 設定為 [VSCTComplile],並將 [包含在 VSIX] 中設定為 [false

      • Resources\Tools 下檔案的所有建置動作設定為 [Content],並將 VSIX 中的 [包含] 標示為 [true

        將連結的檔案新增至 VSIX 專案

      • 此外,ImageOptimizer.csImageOptimizer.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,並視需要設定建置動作。

  5. 建置您的項目來驗證您的變更,並修正任何錯誤/問題。 如需常見問題,請參閱 常見問題 一節。

步驟 3 - 新增 Visual Studio 2022 VSIX 專案

請參考 ,新增 Visual Studio 2022 的目標

  1. 將新的 VSIX 專案新增至您的方案。

  2. 移除新專案中的所有其他原始程式碼,除了 source.extension.vsixmanifest. 之外

    建立新的 VSIX 專案

  3. 新增共用項目的參考。

    git commit dd49cb2

    將參考新增至共用專案

  4. 從 Visual Studio 2019 VSIX 專案新增連結的檔案,並驗證其「建置動作」和「包含在 VSIX」屬性相符。 此外,也會複製您的 source.extension.vsixmanifest 檔案,稍後我們將修改它以支援Visual Studio 2022。

    git commit 98c43ee

    將連結的檔案新增至 VSIX 專案

  5. 進行建置嘗試顯示出我們缺少對 System.Windows.Forms的參考。 只要將它新增至Visual Studio 2022專案並重建即可。

    git commit de71ccd

    + <Reference Include="System.Windows.Forms" />
    
  6. 升級 Microsoft.VisualStudio.SDKMicrosoft.VSSDK.BuildTools 套件參考至 Visual Studio 2022 版本。

    git commit d581fc3

    注意

    這些是本指南建立時可用的最新版本。 建議您取得可用的最新版本。

    -<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" />
    
  7. 編輯您的 source.extension.vsixmanifest 檔案,以反映以Visual Studio 2022為目標。

    git commit 9d393c7

    1. 設定 <InstallationTarget> 標記以反映 Visual Studio 2022,並指出 amd64 承載:

      <InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.0,18.0)">
          <ProductArchitecture>amd64</ProductArchitecture>
      </InstallationTarget>
      
    2. 修改必要條件,只包含 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
      • 掃描您的檔,並以空格取代索引標籤,反之亦然

後續步驟

準備更新您的延伸模組,請閱讀此從頭到尾指南