最近我读到了使用.NET程序集对代码进行分区,并偶然发现了this post的一个很好的建议:“将.NET程序集的数量减少到最低限度”。
我完全同意!我个人经常看到的原因之一是,人们只想隔离一些代码,因此他们将类型/方法内部化并将它们放入一个单独的项目中。
将代码拆分为多个程序集还有很多其他原因(有效而非有效),但如果要隔离组件/ API,同时仍然将它们放在一个库中,你怎么能这样做?
namespace MyAssembly.SomeApiInternals
{
//Methods from this class should not
//be used outside MyAssembly.SomeApiInternals
internal class Foo
{
internal void Boo() { }
}
}
namespace MyAssembly.AnotherPart
{
public class Program
{
public void Test()
{
var foo = MyAssembly.SomeApiInternals.Foo();
foo.Boo(); //Ok, not a compiler error but some red flag at least
}
}
}
如何限制类型/方法在相同程序集中被其他类型/方法使用但在此命名空间之外?
(我将自己给出一些答案,看看人们如何投票。)
谢谢!
答案 0 :(得分:3)
您可以将代码放在不同的程序集中,然后在构建后的步骤中将程序集与ILMerge合并......
答案 1 :(得分:2)
使用NDepend并输入体现所需内容的CQL规则,并将其作为构建的一部分运行。该语言对此级别的限制不感兴趣。 (我还没有关注你的链接 - 你真的试图在没有NDepend的情况下做到这一点吗?你的答案应该将其排除在外?)