Skip to content

chrisdaiii/IgnoresAccessChecksToAttribute

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 

Repository files navigation

此仓库参考 IgnoresAccessChecksToGenerator 自己动手实践,帮助理解原理。

  1. 生成 IgnoresAccessChecksToAttribute 特性,命名空间为 System.Runtime.CompilerServices,该特性只会在运行时会生效,在编译期间无效。

    namespace System.Runtime.CompilerServices
    {
        [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
        public sealed class IgnoresAccessChecksToAttribute : Attribute
        {
            public IgnoresAccessChecksToAttribute(string assemblyName)
            {
                AssemblyName = assemblyName;
            }
    
            public string AssemblyName { get; }
        }
    }
  2. 创建一个AssemblyInfo.cs文件或随便在一个地方应用 IgnoresAccessChecksToAttribute 特性,表示忽略对该程序集的访问修饰符检查。

    [assembly: IgnoresAccessChecksTo("MyProject")]
  3. 生成一个新的 MyProject 程序集,将所有访问级别改为 public

  4. 将生成的新的程序集添加到当前项目中,需要在 AfterResolveReferences Task之后,用于编译通过。

    <ItemGroup>
     <ReferencePath Include="新的程序集.dll" />
    </ItemGroup>
  5. 移除旧的程序集引用,用于消除IDE的诊断错误提示和F12跳转到定义。

    <ItemGroup>
     <ReferencePath Remove="旧的程序集.dll" />
    </ItemGroup>

MSBuild项 @(ReferencePath)

相关问题

image

About

忽略Runtime对访问修饰符的检查

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages