3

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

我不喜欢公开所有这些类以创建公共库的想法。我认为这会使它们暴露太多容易反编译并破坏设计。

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

我正在使用 Visual Studio 2010。

更新

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

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

4

5 回答 5

8

你可能想看看做朋友集会:

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

[assembly:InternalsVisibleTo("someassembly")]
于 2012-02-29T00:35:56.600 回答
3

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

将类设为内部与公共对其反编译能力的影响绝对为零。

于 2012-02-29T00:37:18.890 回答
2

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

于 2012-02-29T00:37:00.257 回答
2

您可以使用程序集上的InternalsVisibleToAttribute来完成此操作

于 2012-02-29T00:37:19.780 回答
0

我认为它使它们过于容易反编译

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

“破坏设计”是另一个问题。如果您想在不同的项目中使用此代码,那么将它们公开是正确的做法。如果您不想将它们公开,那么请考虑该项目真正想要向外部公开的接口仍然可以满足您的需求......并构建该 api 并将公开。

于 2012-02-29T00:43:13.540 回答