[C#] 資産ファイル 'project.assets.json' に 'net48/win7-x64' のターゲットがありませんというエラーの対処方法
新しい SDK 形式の csproj で .NET Framework 4.8 を対象にしているプロジェクトで、RuntimeIdentifiers に関するビルドエラーが発生しました。その対処方法を記載します。
環境
- .NET 8.0.4 (SDK 8.0.204)
- C# 12.0
- Visual Studio 2022 Version 17.9.6
- Windows 11 Pro 22H2 22631.3447
前提
以下のようなエラーが発生した場合の対処方法です。
Visual Studio 上ではビルドは成功しますが、MSBuild CLI でソリューションをビルドしたところエラーが発生しました。
C:\Program Files\dotnet\sdk\8.0.204\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(266, 5): error NETSDK1047: 資産ファイル ‘C:\xxx\SampleProject\obj\project.assets.json’ に ’net48/win7-x64’ のターゲットがありません。復元が実行されたこと、および ’net48’ がプロジェクトの TargetFrameworks に含まれていることを確認してください。プロジェクトの RuntimeIdentifiers に ‘win7-x64’ を組み込む必要が生じる可能性もあります。 [C:\xxx\SampleProject\SampleProject.csproj]
C:\Program Files\dotnet\sdk\8.0.204\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(266, 5): error NETSDK1047: Assets file ‘C:\xxx\SampleProject\obj\project.assets.json’ doesn’t have a target for ’net48/win7-x64’. Ensure that restore has run and that you have included ’net48’ in the TargetFrameworks for your project. You may also need to include ‘win7-x64’ in your project’s RuntimeIdentifiers. [C:\xxx\SampleProject\SampleProject.csproj]
結果
- 💡
<RuntimeIdentifier>
または複数指定の<RuntimeIdentifiers>
を追加することでエラーを解消できます。 - ❗[重要] 設定後に
obj
フォルダを削除してください!
エラーが発生する csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net48</TargetFramework>
</PropertyGroup>
</Project>
エラーメッセージに従い対処した csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net48</TargetFramework>
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
</PropertyGroup>
</Project>
x86 と x64 両方を対象にする場合の csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net48</TargetFramework>
<RuntimeIdentifiers>win7-x86;win7-x64</RuntimeIdentifiers>
<Platforms>x64;x86</Platforms>
</PropertyGroup>
</Project>
<RuntimeIdentifiers>
複数指定する場合はタグ名の最後にs
が付きます。;
区切りで複数指定します。<Platforms>
ソリューションの構成マネージャーに合わせて設定した例です。
❗[重要] 設定後に obj
フォルダを削除してから、ビルドしなおしてください!
感謝
関連記事
新着記事