ビルド時に 「条件 "'$(TargetPlatformIdentifier)' == 'Windows' and '$(TargetPlatformVersion)' >= '8.0'" で、数字ではなく "" と評価された "$(TargetPlatformVersion)" に対して、数値比較を実行しようとしました。」エラーが発生する
ビルド時に 「条件 "'$(TargetPlatformIdentifier)' == 'Windows' and '$(TargetPlatformVersion)' >= '8.0'" で、数字ではなく "" と評価された "$(TargetPlatformVersion)" に対して、数値比較を実行しようとしました。」エラーが発生して、ビルドできない現象について紹介します。
現象
次のエラーが発生します。
Windows App SDKを導入してビルドした場合に発生することが多いです。
エラーメッセージ
条件 "'$(TargetPlatformIdentifier)' == 'Windows' and '$(TargetPlatformVersion)' >= '8.0'" で、数字ではなく "" と評価された
"$(TargetPlatformVersion)" に対して、数値比較を実行しようとしました。
C:\Users\(ユーザー名)\.nuget\packages\microsoft.windowsappsdk\1.1.4\buildTransitive\Microsoft.UI.Xaml.Markup.Compiler.interop.targets
英語では以下のメッセージになります。
エラーメッセージ
A numeric comparison was attempted on "$(TargetPlatformVersion)" that evaluates to "" instead of a number, in condition
"'$(TargetPlatformIdentifier)' == 'Windows' and '$(TargetPlatformVersion)' >= '8.0'".
C:\Users\(user name)\.nuget\packages\microsoft.windowsappsdk\1.1.4\buildTransitive\Microsoft.UI.Xaml.Markup.Compiler.interop.targets
原因
TargetFramework の設定で、バージョン番号が設定されていないことが原因です。
対処法
プロジェクトファイルを編集します。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
</ItemGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
</ItemGroup>
</Project>
以下のTargetFrameworkをバージョン番号を付けた、ターゲット フレームワーク モニカーに変更します。
<TargetFramework>net6.0-windows</TargetFramework>
<TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
変更後にビルドしてエラーが解消されることを確認します。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用