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
相关产品推荐
相关产品推荐

