2

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

我的代码建立在 7-8 个相互调用的不同项目之上,它们具有不同的命名空间,例如“ Company.ProjectName ”,我认为与“ Company ”命名空间相关,我只想要其中一个项目(定义了一个接口顺便说一句)对外部世界可见。

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

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

编辑:internal即使命名空间的构造类似于“ CompanyName.Project1 ”、“ CompanyName.Project2 ”,关键字也会起作用吗?他们会见面吗?

4

2 回答 2

3

你不需要组合它们,你只需要一个朋友组装

在开发类库时,对库的添加包含在单独的程序集中,但需要访问标记为 Friend (Visual Basic) 或 internal (C#) 的现有程序集中的成员。
...
只有明确指定为好友的程序集才能访问好友 (Visual Basic) 或内部 (C#) 类型和成员。

InternalsVisibleTo属性 :

[assembly: InternalsVisibleTo("AssemblyB")]   

有助于将其锁定,因此只有指定的程序集才能访问这些internal项目。

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

于 2016-02-09T10:51:52.543 回答
2

利用internal

请参阅下面的示例

public class MyPublicClass
{

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

internal class MyInternalClass
{

    public void DoSomething()
    {
    }
}

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

MyInternalClass将不可见。

于 2016-02-09T10:51:12.050 回答