Skip to content

Visual Studio 2022で.NET Framework 4.5プロジェクトを開く方法

問題

Visual Studio 2022では、.NET Framework 4.5などの古いバージョンに対応する開発者パックが標準でインストールされていません。そのため、.NET Framework 4.5をターゲットとするプロジェクトを開こうとすると、次のようなエラーが発生します:

  • 「ターゲットフレームワークの参照アセンブリが見つからない」
  • 「.NET Framework 4.5 Developer Packが必要」
  • プロジェクトの読み込みに失敗する

これは、.NET Framework 4.5がサポート終了(EOL)となり、Visual Studio 2022のデフォルトインストールに含まれなくなったためです。

解決策

方法1: NuGetパッケージを追加(推奨)

最も簡単で安全な方法は、プロジェクトに参照アセンブリのNuGetパッケージを追加することです。

xml
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net45</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies.net45" Version="1.0.3">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
  </ItemGroup>
</Project>

メリット

  • 管理者権限が不要
  • プロジェクトごとに個別に設定可能
  • ビルドサーバーでも動作する
  • システムファイルを変更しない

方法2: 参照アセンブリを手動でインストール

NuGetパッケージを使用できない場合は、参照アセンブリを手動でインストールできます。

  1. Microsoft.NETFramework.ReferenceAssemblies.net45 をNuGetからダウンロード
  2. ファイル拡張子を .nupkg から .zip に変更
  3. ZIPファイルを展開し、build\.NETFramework\v4.5\ フォルダ内のファイルをコピー
  4. C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5 に貼り付け
  5. Visual Studioを再起動

注意

この方法では管理者権限が必要で、システムファイルを変更します。

方法3: 公式開発者パックをインストール

Microsoftから直接開発者パックをダウンロードしてインストールする方法もあります。

  1. .NET Framework Developer Packs にアクセス
  2. 「Out of support versions」セクションを展開
  3. 「.NET Framework 4.5.2 Developer Pack」をダウンロード(4.5用として利用可能)

直接リンク: .NET Framework 4.5.2 Developer Pack

情報

.NET Framework 4.5.2は4.5との互換性があり、多くの場合で代用できます。

方法4: Visual Studio 2019を併用インストール

Visual Studio 2019を併せてインストールし、古いターゲットフレームワークのコンポーネントを含める方法です。

  1. Visual Studio 2019インストーラーを実行
  2. 「個別のコンポーネント」タブを選択
  3. 「.NET Framework 4.5 Targeting Pack」をチェックしてインストール

注意点

Visual Studio 2019をアンインストールすると、これらのターゲットパックも削除されます。

自動化スクリプト

PowerShellを使用して複数のバージョンを一度にインストールするスクリプト:

powershell
$isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

if (-not $isAdmin) {
    Start-Process powershell.exe -Verb RunAs -ArgumentList "-File `"$PSCommandPath`""
    exit
}

$versions = @("net40", "net45", "net451", "net452", "net46", "net461", "net462", "net47", "net471", "net472", "net48")

foreach ($version in $versions) {
    $url = "https://www.nuget.org/api/v2/package/Microsoft.NETFramework.ReferenceAssemblies.$version"
    $outputZip = Join-Path -Path $env:TEMP -ChildPath "Microsoft.NETFramework.ReferenceAssemblies.$version.zip"
    $outputFolder = "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\"

    Invoke-WebRequest -Uri $url -OutFile $outputZip
    Expand-Archive -Path $outputZip -DestinationPath $outputFolder\tmp -force
    xcopy "$outputFolder\tmp\build\.NETFramework\*" $outputFolder /E /H /Y
    Remove-Item $outputZip -Force
    Remove-Item $outputFolder\tmp -Recurse -Force
}

トラブルシューティング

プロジェクトを開いた後も問題が解決しない場合:

  1. ソリューションをクリーン(dotnet clean または VSの「ビルド」>「ソリューションのクリーン」)
  2. binobj フォルダを手動で削除
  3. NuGetパッケージの復元(dotnet restore
  4. Visual Studioを再起動

まとめ

方法メリットデメリット推奨度
NuGetパッケージ管理者権限不要、プロジェクトごと設定プロジェクト変更が必要⭐⭐⭐⭐⭐
手動インストール一度の設定で全プロジェクト対応管理者権限必要、システム変更⭐⭐⭐
公式パック公式サポート古いバージョンは非推奨⭐⭐
VS2019併用公式な方法追加ソフトインストール必要

最もおすすめなのは方法1のNuGetパッケージ追加です。これはMicrosoftも推奨している方法で、プロジェクトの移植性が高く、チーム開発やCI/CD環境でも問題なく動作します。

古い.NET Frameworkプロジェクトをメンテナンスする必要がある場合は、可能であれば新しいバージョンへのアップグレードも検討しましょう。