You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI3中能否将UserControl设为Internal并授权指定程序集使用?

WinUI3中实现Internal XAML控件的授权访问方案

可以实现你的需求,但由于XAML编译的特殊性,需要额外调整配置,以下是具体步骤:

1. 配置控件库Assembly1.dll

  • 设置程序集可见性:在项目的AssemblyInfo.cs(或通过项目属性的“程序集信息”)中添加InternalsVisibleTo属性,指定允许访问内部成员的目标程序集(需包含公钥,若程序集强签名):
    [assembly: InternalsVisibleTo("Main, PublicKey=0024000004800000940000000602000000240000525341310004000001000100...")]
    
  • 定义Internal控件:将MyUserControl的代码隐藏类标记为internal,XAML根元素无需额外指定访问修饰符(由代码隐藏类控制):
    internal sealed partial class MyUserControl : UserControl
    {
        public MyUserControl()
        {
            InitializeComponent();
        }
    }
    
  • 调整XAML编译配置:修改Assembly1的.csproj文件,添加以下配置,强制XAML生成的部分类使用internal访问级别(默认是公共,会和代码隐藏类冲突):
    <PropertyGroup>
      <XamlCompilerGeneratePartialClasses>true</XamlCompilerGeneratePartialClasses>
      <XamlCompilerGeneratedCodeAccessibility>internal</XamlCompilerGeneratedCodeAccessibility>
    </PropertyGroup>
    

2. 在Main.exe中使用控件

  • 正常引用Assembly1.dll后,在MainPage.xaml中添加命名空间引用:
    xmlns:controls="using:Assembly1.Namespace"
    
  • 直接在XAML中实例化控件:
    <controls:MyUserControl />
    

3. 权限验证

未被添加到InternalsVisibleTo的外部程序集(如SomeoneElsesMain.exe)即使引用Assembly1.dll,编译时会因无法访问internal控件而报错,完全符合你限制控件仅内部特定程序集使用的需求。

内容的提问来源于stack exchange,提问作者user1757226

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:45:22