tech.guitarrapc.cóm

Technical updates

NuGet Central Package Managementに移行するのにCopilotを使う

VS CodeのCopilotを使って、NuGet Central Package Managementに移行する体験がよかったのでメモです。

.NET Upgrade Assistantが機能しないケース

以前、.NETアップグレードアシスタントでNuGet Central Package Managementに移行する記事を紹介しましたが、中には移行ダイアログがグレーアウトして移行できないケースがあります。 そんな時でもCopilotを使うと簡単に移行できます。

※ グレーアウトするのは1プロジェクトだけNuGetパッケージ参照があるケースのようです。

グレイアウトして移行できない

Copilotで移行する

VS CodeにてCopilotをエージェントモード1で起動して、Directory.Packages.propsを作成するように指示します。

NuGet Central Package Managementを利用したいので、現在のNuGetパッケージを移行してください。

Copilotへの指示と結果

移行完了です。

Directory.Packages.propsの追加

既存csprojからパッケージを移行

Before

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net9.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="coverlet.collector" Version="6.0.2" />
    <PackageReference Include="GitHubActionsTestLogger" Version="2.4.1">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
    <PackageReference Include="NSubstitute" Version="5.3.0" />
    <PackageReference Include="xunit.v3" Version="2.0.1" />
    <PackageReference Include="xunit.runner.visualstudio" Version="3.0.2" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\DotfilesLinker\DotfilesLinker.csproj" />
  </ItemGroup>

  <ItemGroup>
    <Using Include="Xunit" />
  </ItemGroup>

</Project>

After

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net9.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="coverlet.collector" />
    <PackageReference Include="GitHubActionsTestLogger">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.NET.Test.Sdk" />
    <PackageReference Include="NSubstitute" />
    <PackageReference Include="xunit.v3" />
    <PackageReference Include="xunit.runner.visualstudio" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\DotfilesLinker\DotfilesLinker.csproj" />
  </ItemGroup>

  <ItemGroup>
    <Using Include="Xunit" />
  </ItemGroup>

</Project>

Directory.Packages.props

<Project>
  <PropertyGroup>
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
    <CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
  </PropertyGroup>

  <ItemGroup>
    <!-- Test packages -->
    <PackageVersion Include="coverlet.collector" Version="6.0.2" />
    <PackageVersion Include="GitHubActionsTestLogger" Version="2.4.1" />
    <PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
    <PackageVersion Include="NSubstitute" Version="5.3.0" />
    <PackageVersion Include="xunit.v3" Version="2.0.1" />
    <PackageVersion Include="xunit.runner.visualstudio" Version="3.0.2" />
  </ItemGroup>
</Project>

まとめ

Copilotは、人の手でやるにはめんどくさく機械的にできることの精度が高いので、NuGet Central Package Managementでも利用できるのは便利でした。 Copilotがいればcsprojの管理もお任せできて便利。


  1. Claude 3.7 Sonnetはいい感じですがGPT-4oは微妙