🔖

Visual Studio で .NET Framework プロジェクトを SDK スタイルで作成する方法

に公開

Visual Studio で .NET Framework プロジェクトを作成すると、従来の「レガシー」形式の .csproj が生成されます。しかし、SDK スタイルのプロジェクトファイルは記述がシンプルでメンテナンス性が高く、NuGet パッケージの参照やクロスプラットフォーム対応も容易になります。この記事では、.NET Framework 向けに SDK スタイルのプロジェクトを手動で作成・移行する手順を解説します。


1. SDK スタイルのメリット

  • シンプル: <Project Sdk="Microsoft.NET.Sdk"> 1行で開始できる
  • NuGet 参照が簡単: <PackageReference> のみで管理
  • クロスプラットフォーム対応: .NET CLI での操作が可能
  • ビルド高速化: インクリメンタルビルドの恩恵

2. SDK スタイルの .csproj テンプレート

以下は、.NET Framework 4.7.2 向けに SDK スタイルを適用した最小構成のサンプルです。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net472</TargetFramework>
    <UseWPF>true</UseWPF>           <!-- WPF プロジェクトの場合 -->
    <LangVersion>9.0</LangVersion>  <!-- C# 言語バージョン指定 -->
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
  </PropertyGroup>

  <ItemGroup>
    <!-- NuGet パッケージ参照 -->
    <PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.0" />
    <PackageReference Include="NPOI" Version="2.7.2" />
  </ItemGroup>

  <ItemGroup>
    <!-- 他プロジェクト参照 -->
    <ProjectReference Include="..\Library\Library.csproj" />
  </ItemGroup>
</Project>

3. 手順: 新規作成から移行まで

3.1 新規 SDK スタイル .NET Framework プロジェクトを作成

  1. 空の SDK プロジェクトを作成
    Visual Studio の「新しいプロジェクト」画面で「空のプロジェクト」を選択し、プロジェクトタイプを「.NET Core」ではなく「汎用」にするか、C# ライブラリ (.NET Standard) テンプレートを選択して後から TargetFramework を書き換えます。
  2. .csproj を手動編集
    上記テンプレートをコピーし、ファイルを上書きします。

3.2 既存レガシーからの移行

  1. バックアップ: 既存 .csproj を別名で保存。
  2. 新規 SDK スタイル .csproj を作成: 同じフォルダに上記テンプレートを配置。
  3. ソースファイルの参照: <Compile Include="**\*.cs" /> は不要。既存の .cs は自動インクルードされます。
  4. NuGet パッケージの移行: packages.config の内容を <PackageReference> にコピー。
  5. ビルド・動作確認: ビルドエラーを修正し、動作テストを行う。

4. 注意点

  • Visual Studio のバージョン: VS2019 以降でのサポートが充実。
  • カスタム MSBuild タスク: レガシーなカスタムターゲットを使っている場合は、手動で <Import> が必要になることもあります。
  • CI/CD との連携: .NET CLI (dotnet build) でビルド可能になるため、パイプラインが簡素化されます。

SDK スタイルを採用すると、プロジェクトファイルが格段に読みやすくなり、NuGet 管理やビルドプロセスも統一できます。ぜひ、.NET Framework プロジェクトにも SDK スタイルを導入してみてください!

Discussion