.NET Core 3.0 のデスクトップアプリが次のコンパイルエラーでビルドできなくなることがあります。
重大度レベル コード 説明 プロジェクト ファイル 行 Suppression State
エラー MC1003 Project file cannot specify more than one ApplicationDefinition element. XXXXXX X:\XXXXXX\dotnet\sdk\3.0.100-preview-009812\Sdks\Microsoft.NET.Sdk.WindowsDesktop\targets\Microsoft.WinFX.targets重大度レベル コード 説明 プロジェクト ファイル 行 Suppression State
エラー BG1003 The project file contains a property value that is not valid. XXXXXX X:\XXXXXX\dotnet\sdk\3.0.100-preview-009812\Sdks\Microsoft.NET.Sdk.WindowsDesktop\targets\Microsoft.WinFX.targets
■ 原因
今回エラーとなった原因は、最新の Preview 版で .csproj のフォーマットが変更されたことでした。 以前の alpha バージョンの .NET Core 3.0 で作成した .csproj と 現時点の最新の Preview バージョンの .csproj のフォーマットの例を挙げてみます。
alpha 版の例
<Project Sdk="Microsoft.NET.Sdk.Wpf"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> </PropertyGroup> <ItemGroup> <ApplicationDefinition Include="App.xaml" /> <Page Include="MainWindow.xaml" /> </ItemGroup> <ItemGroup> <FrameworkReference Include="Microsoft.DesktopUI" /> </ItemGroup> </Project>
最新の Preview 版の例
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> <UseWPF>true</UseWPF> </PropertyGroup> </Project>
古い形式の .csproj ではそもそも Visual Studio でプロジェクトを開くことができません。Project Sdk=
属性と <UseWPF>true</UseWPF>
などを変更・追加し、新し形式に合わせることで Visual Studio で開けるようになります。
つまり
<ItemGroup> <ApplicationDefinition Include="App.xaml" /> <Page Include="MainWindow.xaml" /> </ItemGroup>
の記述があっても、プロジェクトは開きます。しかし上記のエラー発生します。
■ 対策
.csproj の新しい形式に合わせて
<ItemGroup> <ApplicationDefinition Include="App.xaml" /> <Page Include="MainWindow.xaml" /> </ItemGroup>
の記述も削除し、新しいフォーマットの .csproj に書き換えることで解決し、ビルド。実行できるようになりました。