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.
[assembly: InternalsVisibleTo("AssemblyB")]
有助于锁定它,以便只有指定的程序集才能访问 internal
项。
(回答您的编辑:这是在程序集级别指定的,命名空间是什么并不重要)。
当我向第三方应用程序发布 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.
[assembly: InternalsVisibleTo("AssemblyB")]
有助于锁定它,以便只有指定的程序集才能访问 internal
项。
(回答您的编辑:这是在程序集级别指定的,命名空间是什么并不重要)。