c# 在导出 DLL 时隐藏 class 成员

c# hide class members when exporting DLL

当我向第三方应用程序发布 DLL 时,我能否只让最终用户看到一些方法?

我的代码基于 7-8 个不同的项目构建,这些项目相互调用,它们有不同的命名空间,例如“Company.ProjectName”,我认为它在“Company”命名空间下相关,我只希望其中一个项目(具有定义为 BTW 的接口)对外部世界可见。

解决方案中的每个项目都编译成 DLL,然后我使用 ILASM 将它们组合起来。

顺便说一句,解决方案中还有其他项目使用这些与此 dll 无关。

编辑:即使命名空间的构造类似于“CompanyName.Project1”,“CompanyName.Project2[=”,internal 关键字是否有效? 27=]" ?他们会见面吗?

使用internal

参见下面的示例

public class MyPublicClass
{

    public void DoSomething()
    {
        var myInternalClass = new MyInternalClass();
        myInternalClass.DoSomething();
    }
}

internal class MyInternalClass
{

    public void DoSomething()
    {
    }
}

在您的 DLL 中,MyPublicClass 将对外部用户可见 - 那些引用您的 DLL 的用户。

MyInternalClass 将不可见。

你不需要组合它们,你只需要一个friend assembly

When you are developing a class library and additions to the library are contained in separate assemblies but require access to members in existing assemblies that are marked as Friend (Visual Basic) or internal (C#).
...
Only assemblies that you explicitly specify as friends can access Friend (Visual Basic) or internal (C#) types and members.

InternalsVisibleTo 属性:

[assembly: InternalsVisibleTo("AssemblyB")]   

有助于锁定它,以便只有指定的程序集才能访问 internal 项。

(回答您的编辑:这是在程序集级别指定的,命名空间是什么并不重要)。