在项目之间共享C#中的代码,而不公开类

本文关键字:代码 之间 项目 共享 | 更新日期: 2023-09-27 18:26:01

我有一个C#库,它有很多内部功能,只公开了一些公共类和接口。我想在几个项目之间共享这段代码,每个项目可能都需要用子类来扩展内部类。

我不喜欢为了创建一个公共库而公开所有这些类的想法。我认为这会让它们过于容易被反编译,破坏设计。

唯一真正的选择是创建源代码的副本并在项目之间保持这些文件的同步吗?或者,是否有某种方法可以共享代码,并且仍然为每个项目获得一个仅公开少数公共接口和类的库?

我正在使用Visual Studio 2010。

更新

感谢您对反编译和"私人"访问的澄清。我想我可以考虑在几个输入库上应用一个模糊器,希望能模糊它们的公共连接。

从设计的角度来看,答案似乎是使用友元程序集。

在项目之间共享C#中的代码,而不公开类

你可能想看看做朋友组装:

http://msdn.microsoft.com/en-us/library/0tke9fxk(v=vs.80).aspx

[assembly:InternalsVisibleTo("someassembly")]
创建一个新项目。文件>添加>现有。选择现有的代码文件。点击"打开"按钮上的下拉菜单,然后选择"链接"。

使类内部化与公开化对其反编译能力没有任何影响。

您正在寻找"friend"程序集:http://msdn.microsoft.com/en-us/library/0tke9fxk(v=vs.80).aspx

您可以使用程序集上的InternalsVisibleToAttribute来实现这一点

我认为这让他们太容易反编译了

你会感到震惊,因为即使是程序集中的私有类也可以被简单地反编译并用于创建公共实现。

"破坏设计"是另一个问题。如果你想从单独的项目中使用这些代码,那么公开它们正是正确的做法。如果你不想公开它们,那么想想这个项目真正想向外部公开什么接口,它仍然可以实现你需要的。。。构建该api并使成为公共。