【问题标题】:How to remove baml from WPF assembly?如何从 WPF 程序集中删除 baml?
【发布时间】:2012-06-17 00:26:28
【问题描述】:

使用合并的资源字典会降低应用程序的性能。在我的程序集中,我经常需要使用合并的资源字典。我想将资源合并到一个字典中,并删除原始的baml。我无法将 Build Action 设置为 None(而不是 Page),因为在这种情况下我失去了一些功能(例如,resharper 没有语法突出显示)。我该怎么做?

【问题讨论】:

    标签: wpf reflection .net-assembly mono.cecil baml


    【解决方案1】:

    运行时您的应用程序仍需要读取链接的 BAML 资源文件,因此您无法从程序集中删除 BAML。

    例如:

    您合并以下资源字典

    • dictionary1.xaml
    • dictionary2.xaml

    merged.xaml.

    您不能简单地删除已编译的 XAML(BAML - dictionary1.bamldictionary2.baml),因为正如我所写,在运行时您仍然需要这些资源。

    但是,无论如何,您可以将 XAML 资源的内容直接复制到 merged.xaml,这样您将只有 merged.baml(在编译器在您的程序集资源部分生成它之后)。

    【讨论】:

    • 我已经将字典中的内容复制到了merged.xml 文件中,但我不想删除dictionary1.xaml 和dictionary2.xaml 文件,但我需要这样做,否则编译器会生成dictionary1 .baml 和 dictionary2.baml。我可以手动删除 dictionary1.baml 和 dictionary2.baml 吗?
    • 是的,你可以删除这些文件,因为你可以删除任何其他不受保护或被另一个进程使用的文件(如果你使用VS你通常可以在obj目录下找到它们),但是,正如我所写,您的应用程序需要这些文件。
    • 不,我的应用程序不需要这些文件。 merge.xaml 已经包含 dictionary1.xaml 和 dictionary2.xaml 的所有数据,因为我将数据从 dictionary1.xaml 和 dictionary2.xaml 复制到 merge.xaml。我不使用 ResourceDictionary.MergedDictionary 属性。
    • 因此,如果您愿意,请删除字典,或者最多将其构建操作设置为 None
    • 我不想将 Build Action 设置为 None(而不是 Page),因为在这种情况下我失去了一些功能(例如,Resharper 没有语法突出显示)。
    猜你喜欢
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2016-11-27
    相关资源
    最近更新 更多