首页 > 解决方案 > XAML 中无法访问 Friend 程序集的内部成员

问题描述

问题陈述

我有两个程序集,一个主要包含数据合同,另一个包含 UI 层。

数据协定是公共的,并DataTemplate在 UI 程序集中的 XAML 中的标记中使用。

<DataTemplate DataType="{x:Type contracts:MyContract}"> 
///other stuff
</DataTemplate>

数据合同是汇编,如下所示:

<xmlns:contracts="clr-namespace:Contracts.DataContracts,assembly=Contracts.DataContracts"

现在我想让一切都在内部 DataContract 程序集中,以保持较低的 API 表面。我在AssemblyInfoDataContracts 程序集类中添加了 UI 程序集作为朋友程序集。但是,当我编译 UI 程序集时,我在 XAML 中收到以下错误:

Only public or internal classes can be used within markup. 'MyContract' type is not public or internal.

我已经检查过它InternalVisibleTo是否正常工作,因为我可以在后面的代码中访问其他内部内容。但在 XAML 中这是不可能的。

有什么可能的方法来解决这个问题?

标签: c#wpfxamlaccess-modifiers

解决方案


不太清楚您试图从程序集扩展到应用程序的内容,但是当我在库中有 XAML 时,我倾向于在应用程序中以这种方式引用它。

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/YourAssembly;component/PathInAssemblyIfNeeded/YourXAMLReferences.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>

如果这没有帮助,请提供有关您要完成的工作的更多信息。


推荐阅读