c#导出DLL时隐藏类成员

c#导出DLL时隐藏类成员,c#,dll,.net-assembly,ilasm,C#,Dll,.net Assembly,Ilasm,当我将DLL发布到第三方应用程序时,是否只能使某些方法对最终用户可见 我的代码是建立在7-8个不同的项目上的,相互调用,它们有不同的名称空间,比如“公司.ProjectName”,我认为这些名称空间与“公司”名称空间相关,我只希望其中一个项目(其接口由BTW定义)对外部世界可见 解决方案中的每个项目都编译成DLL,然后我使用ILASM将它们组合起来 顺便说一句,解决方案中还有其他使用这些的项目与此dll无关 编辑:internal关键字是否有效,即使名称空间的构造类似于“CompanyName.

当我将DLL发布到第三方应用程序时,是否只能使某些方法对最终用户可见

我的代码是建立在7-8个不同的项目上的,相互调用,它们有不同的名称空间,比如“公司.ProjectName”,我认为这些名称空间与“公司”名称空间相关,我只希望其中一个项目(其接口由BTW定义)对外部世界可见

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

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


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

使用
internal

请参见下面的示例

public class MyPublicClass
{

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

internal class MyInternalClass
{

    public void DoSomething()
    {
    }
}
在您的DLL中,
MyPublicClass
将对外部用户可见,即引用您的DLL的用户


MyInternalClass
将不可见。

您不需要组合它们,只需要一个:

开发类库时,库中的添加项包含在单独的程序集中,但需要访问标记为Friend(Visual Basic)或internal(C#)的现有程序集中的成员。

只有显式指定为好友的程序集才能访问好友(Visual Basic)或内部(C#)类型和成员

属性:

[assembly: InternalsVisibleTo("AssemblyB")]   
有助于将其锁定,以便只有指定的程序集才能访问
内部


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

您可以将所有类成员作为不希望导出的内部成员。我尝试过,但运气不好。我在
AssemblyB
参数中编写了名称空间、类名和所有内容,但它不起作用。您需要向我们具体说明哪些不起作用,否则我们只能猜测问题出在哪里。你尝试过这个但仍然尝试组合程序集吗?我在名称空间下写了它,到了类,我把它移到了名称空间,然后它工作了:)谢谢。