#c# #wpf #.net-5 #class-library
Вопрос:
Раньше, в .NET Framework, когда я создавал библиотеку классов WPF, у меня был файл App.xaml (заданный в качестве определения приложения), который ссылался на мои словари ресурсов таким образом:
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ResourceDictionary1.xaml" />
<ResourceDictionary Source="ResourceDictionary2.xaml" />
<ResourceDictionary Source="ResourceDictionary3.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
Однако теперь, с .NET 5, я получаю эту ошибку компиляции:
Файл проекта библиотеки не может указать элемент определения приложения.
Таким образом, это сообщение означает, что у меня больше не может быть файла App.xaml в библиотеке классов. Но теперь я не знаю, как определить свои ресурсы глобально в библиотеке классов. Неужели нет никакого способа сделать это без ссылок на словари в каждом файле XAML в проекте?
Правка: Дело не в Source
синтаксисе. Путь правильный, и все отлично компилируется, если я установлю проект в приложение Windows вместо библиотеки классов.
Комментарии:
1. Тип .net библиотеки классов должен совпадать с типом проекта.
2. Напишите, на какие платформы ориентирован ваш проект.
3.@EldHasp я использовал значение по умолчанию .Шаблон библиотеки классов NET 5 WPF
<TargetFramework>net5.0-windows</TargetFramework>
<UseWPF>true</UseWPF>
, И я пытаюсь скомпилировать его в отладке для любого процессора. Но проблема возникает и на x64.4. Я пытался как-то решить эту проблему, но у меня ничего не получалось. Возможно, по сути это действительно неприемлемо и требует другого подхода.
5. Я не могу воспроизвести проблему. У меня та же ошибка . Библиотека NET framework.
Ответ №1:
ссылаясь на эту проблему github : https://github.com/dotnet/wpf/issues/2812#issuecomment-607537794
В проекте WindowsDesktop в стиле SDK,
*.xaml все по умолчанию рассматриваются как элементы страницы, если только они не называются App.xaml (C#) или Application.xaml (VB).
По умолчанию App.xaml/Application.xaml обрабатывается как определение приложения.
<!--
Disables automatic globbing of App.xaml/Application.xaml into
ApplicationDefinition item
App.xaml/Application.xaml would now get treated as any other *.xaml file
(typically, a Page)
-->
<PropertyGroup>
<EnableDefaultApplicationDefinition>false</EnableDefaultApplicationDefinition>
</PropertyGroup>
Стоит попробовать.
Комментарии:
1. проверьте, как также ссылаются на ваш App.xaml: <ItemGroup> <ItemGroup><Страница включает=»App.xaml» /> <Страница Включает=»App.xaml» /></ItemGroup>
Ответ №2:
Для меня работает следующее: Если у вас есть библиотека-проект с ресурсами (т. е. пространство имен «Project.Resources«) и есть презентация-проект (т. е. пространство имен «Project.Presentation«):
<Application x:Class="Project.Presentation.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Project.Resources;Dictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
Не забудьте добавить ссылку на «Проект.Ресурсы» в «Проект.Презентация».