Skip to content

C# 友元程序集

L edited this page Mar 14, 2023 · 2 revisions

友元程序集是可以访问其他程序集的内部 (C#) 或友元 (Visual Basic) 类型和成员的程序集。 如果将一个程序集标识为友元程序集,则无需再将类型和成员标记为公共,其他程序集就能访问它们。这在我们进行测试时十分实用。

这里我们使用单元测试项目的代码,在UnitTest.ClassLibrary中新增InternalTestService类,并允许XUnit.Coverlet.Collector项目访问它。

using System.Runtime.CompilerServices;

[assembly: InternalsVisibleTo("XUnit.Coverlet.Collector")]
namespace UnitTest.ClassLibrary
{
    internal class InternalTestService
    {
        internal int Add(int number1, int number2)
        {
            return number1 + number2;
        }
    }
}

注意[assembly: InternalsVisibleTo("XUnit.Coverlet.Collector")]需要添加到除了使用条款和外部声明以外的所有元素之上,否则会提示报错:

Assembly and module attributes must precede all other elements defined in a file except using clauses and extern alias declarations.

之后,XUnit.Coverlet.Collector就可以正常使用InternalTestService了。

public class InternalTestServiceUnitTest
{
    [Fact]
    public void Add()
    {
        InternalTestService internalTestService = new InternalTestService();
        internalTestService.Add(1, 2).ShouldBe(3);
    }
}

示例代码

InternalTestService
InternalTestServiceUnitTest

参考资料

友元程序集
internal(C# 参考)

Clone this wiki locally