如何隐藏常用程序集类?
How to hide common assembly classes?
我正在开发一个分成多个项目的软件,您可以将其视为:
- 客户
- 服务器
- 普通
客户端和服务器都引用 Common,并从中使用 类。因此,Common 中的 类 为 public。但是,虽然我希望它们被客户端和服务器使用,但我不希望它们被使用客户端和服务器库的外部代码使用。
将 类 标记为内部显然不是一种选择。有没有一种方法可以使它们对客户端和服务器可用,但对外界隐藏它们?
你取消了 internal
的资格,因为你假设你的另一个 Assemblies
将无法使用 internal
Types
,这不一定是真的。
InternalsVisibleToAttibute
是一个 Assembly Attribute
,它允许您使一个项目的 internal
Types
对其他选定项目可见。
通过这种方式,您可以创建通用类型 internal
,但使用此 Attribute
可使它们对 Server 和 Client.
[assembly:InternalsVisibleTo("Client", "PublicKey=2345456456...")]
[assembly:InternalsVisibleTo("Server", "PublicKey=5345347366...")]
在我看来,internal
通常有点代码味道......它并没有真正保护你的代码,而是让以后更难扩展......我会只需保留 Types
public
并使用 XML 文档即可确保使用我的 Types
的人会按照我的意思使用它们,但这只是我的观点...
您可以在 Common
程序集中使用 internal
类 和 InternalsVisibleToAttribute
。将属性添加到 Common
项目的 AssemblyInfo
并指定将有权访问其 internal
的程序集。
[assembly:InternalsVisibleTo("Client")]
[assembly:InternalsVisibleTo("Server")]
尽管我只会制作类型 public
。
除属性 InternalsVisibleTo
之外的另一个选项是将 Common
项目创建为共享项目(在 VS 2015 中可用),这样 Client
和 Server
将具有访问内部 类 因为共享项目将包含在每个项目的程序集中,而不是像 Class 库那样移动到单独的程序集中。
我正在开发一个分成多个项目的软件,您可以将其视为:
- 客户
- 服务器
- 普通
客户端和服务器都引用 Common,并从中使用 类。因此,Common 中的 类 为 public。但是,虽然我希望它们被客户端和服务器使用,但我不希望它们被使用客户端和服务器库的外部代码使用。
将 类 标记为内部显然不是一种选择。有没有一种方法可以使它们对客户端和服务器可用,但对外界隐藏它们?
你取消了 internal
的资格,因为你假设你的另一个 Assemblies
将无法使用 internal
Types
,这不一定是真的。
InternalsVisibleToAttibute
是一个 Assembly Attribute
,它允许您使一个项目的 internal
Types
对其他选定项目可见。
通过这种方式,您可以创建通用类型 internal
,但使用此 Attribute
可使它们对 Server 和 Client.
[assembly:InternalsVisibleTo("Client", "PublicKey=2345456456...")]
[assembly:InternalsVisibleTo("Server", "PublicKey=5345347366...")]
在我看来,internal
通常有点代码味道......它并没有真正保护你的代码,而是让以后更难扩展......我会只需保留 Types
public
并使用 XML 文档即可确保使用我的 Types
的人会按照我的意思使用它们,但这只是我的观点...
您可以在 Common
程序集中使用 internal
类 和 InternalsVisibleToAttribute
。将属性添加到 Common
项目的 AssemblyInfo
并指定将有权访问其 internal
的程序集。
[assembly:InternalsVisibleTo("Client")]
[assembly:InternalsVisibleTo("Server")]
尽管我只会制作类型 public
。
除属性 InternalsVisibleTo
之外的另一个选项是将 Common
项目创建为共享项目(在 VS 2015 中可用),这样 Client
和 Server
将具有访问内部 类 因为共享项目将包含在每个项目的程序集中,而不是像 Class 库那样移动到单独的程序集中。