【问题标题】:WPF Resources in class library in .NET 5.NET 5 中类库中的 WPF 资源
【发布时间】:2021-07-22 10:50:53
【问题描述】:

之前,在 .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,我得到了这个编译错误:

库项目文件不能指定 ApplicationDefinition 元素。

所以该消息意味着我不能再在类库中拥有 App.xaml 文件了。但是现在,我不知道如何在类库中全局定义我的资源。如果不引用项目中每个 XAML 文件中的字典,是否有任何方法可以做到这一点?

编辑:这与Source 语法无关。如果我将项目设置为 Windows Application 而不是 Class Library,则路径是正确的并且一切都可以完美编译。

【问题讨论】:

  • 类库的.net类型必须与项目类型一致。
  • 写下您的项目所针对的平台。
  • @EldHasp 我使用了默认的 .NET 5 WPF 类库模板 &lt;TargetFramework&gt;net5.0-windows&lt;/TargetFramework&gt; &lt;UseWPF&gt;true&lt;/UseWPF&gt; 我尝试在 Debug for Any CPU 中进行编译。但问题也出现在 x64 上。
  • 我试图以某种方式解决这个问题,但对我没有任何帮助。也许在 Core 中,这确实是不可接受的,需要采用不同的方法。
  • 我无法重现该问题。我对 .NET 框架库有同样的错误。

标签: c# wpf .net-5 class-library


【解决方案1】:

参考那个 github 问题:https://github.com/dotnet/wpf/issues/2812#issuecomment-607537794

在 SDK 风格的 WindowsDesktop 项目中,

默认情况下,*.xaml 都被视为页面项,除非它们被命名为 App.xaml (C#) 或 Application.xaml (VB)。

App.xaml/Application.xaml 默认被视为 ApplicationDefinition。

<!-- 
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>

值得一试。

【讨论】:

  • 检查您的 App.xaml 是如何被引用的:
【解决方案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>

不要忘记在“Project.Presentation”中添加对“Project.Resources”的引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 2015-08-27
    • 2011-06-14
    相关资源
    最近更新 更多