ImageOptimizer - 按步骤更新 Visual Studio 扩展

本指南将以案例研究的形式介绍添加 Visual Studio 2022 支持同时使用图像优化器扩展维护 Visual Studio 2019 支持所需的所有步骤。
该指南非常完整,包含各个步骤的 Git 提交链接,但你也可在此处查看最终 PR:https://github.com/madskristensen/ImageOptimizer/pull/46

本指南还在末尾处提供了其他示例

步骤 1 - 对项目进行现代化改造

请参阅对项目进行现代化改造

Git 提交 e052465

首先,在项目的“属性”页下将 VSIX 和单元测试项目提升至 .NET 4.7.2:

Framework version bump

映像优化器引用一些旧版的自定义 14.* 和 15.* 包,而我们将安装合并所有所需引用的 Microsoft.VisualStudio.SdkNuGet 包

-  <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 提交 abf249d

    Add shared project

  2. 向 VSIX 项目添加对共享项目的引用。

    Git 提交 e8e941e

    Add shared project reference

  3. 将源代码文件(cs、xaml、resx)移动到新的共享项目,以下文件除外

    • source.extension.vsixmanifest
    • 扩展元数据文件(图标、许可证、发行说明等)
    • VSCT 文件
    • 链接文件
    • 需要包含在 VSIX 中的外部工具或库

    Git 提交 f31f051

    Move files to shared project

  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

        Add linked files to VSIX project

      • 此外,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. 以外的所有其他源代码

    Create a new VSIX project

  3. 添加对共享项目的引用。

    Git 提交 dd49cb2

    Add reference to shared project

  4. 从 Visual Studio 2019 VSIX 项目添加链接文件,并验证这些文件的“生成操作”和“在 VSIX 中包括”属性是否匹配。 此外,请复制 source.extension.vsixmanifest 文件,稍后我们将对其进行修改,以支持 Visual Studio 2022。

    Git 提交 98c43ee

    Add Linked files to VSIX project

  5. 尝试的生成显示缺少对 System.Windows.Forms 的引用。 只需将其添加到我们的 Visual Studio 2022 项目并进行重新生成。

    Git 提交 de71ccd

    + <Reference Include="System.Windows.Forms" />
    
  6. 升级对 Visual Studio 2022 版本的 Microsoft.VisualStudio.SDKMicrosoft.VSSDK.BuildTools 包引用。

    Git 提交 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 提交 9d393c7

    1. 设置 <InstallationTarget> 标记以反映 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" />
      

大功告成!

这样一来,生成现在会生成 Visual Studio 2019 和 Visual Studio 2022 VSIX。

其他示例

  • ProPower 工具
    • PeekF1
      • 支持在 Web 浏览器中查看所选类/对象的帮助信息。
    • FixMixedTabs
      • 扫描文档,将制表符替换为空格,或将空格替换为制表符

后续步骤

请阅读此完整流程指南,为更新扩展做好准备。