我有一个C#库,其中包含许多内部功能,只暴露了一些公共类和接口。我想在几个项目之间共享此代码,每个项目可能需要使用子类扩展内部类。
我不喜欢将所有这些类公开以创建公共库的想法。我认为它太过于容易反编译并破坏了设计。
是创建源代码副本并使这些文件在项目之间保持同步的唯一真正选择吗?或者,我是否可以通过某种方式共享代码并为每个项目获取单个库,只显示少数预期的公共接口和类?
我正在使用Visual Studio 2010。
更新
感谢有关反编译和“私人”访问的说明。我想我可以考虑将混淆器应用于几个输入库,所有这些都在一起,希望甚至可以混淆他们的公共连接。
从设计的角度来看,似乎答案肯定是使用好友装配。
答案 0 :(得分:7)
你可能想看看做朋友集会:
http://msdn.microsoft.com/en-us/library/0tke9fxk(v=vs.80).aspx
[assembly:InternalsVisibleTo("someassembly")]
答案 1 :(得分:3)
创建一个新项目。文件>添加>现有。选择现有代码文件。点击打开按钮上的下拉菜单,然后选择链接。
使内部与公开的类绝对零会影响它的反编译能力。
答案 2 :(得分:2)
答案 3 :(得分:2)
您可以使用程序集中的InternalsVisibleToAttribute
来完成此操作答案 4 :(得分:0)
我认为它暴露了太多容易反编译
然后你会感到震惊,因为即使是汇编中的私有类也可以通过简单的解编译并用于创建公共实现。
“打破设计”是另一个问题。如果你想从单独的项目中使用这个代码,那么将它们公开是正确的。如果你不想让它们公开,那么考虑一下这个项目真正想要暴露给外部的界面,它仍然可以完成你需要的东西......并构建那个api并使 it 公开。