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:

框架版本升级

图片优化器引用了一些旧的自定义 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 提交 abf249d

    添加共享项目

  2. 在 VSIX 项目中添加一个共享项目的引用。

    Git 提交 e8e941e

    添加共享项目引用

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

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

    Git 提交 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 提交 dd49cb2

    添加对共享项目 的引用

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

    Git 提交 98c43ee

    将链接文件添加到 VSIX 项目

  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> 标记以反映 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" />
      

我们完成了!

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

其他示例

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

后续步骤

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