.net - 阻止将特定的程序集添加到我的工厂项目中?

标签 .net assemblies reference factory compiler-errors

我创建了一个工厂程序集,可以处理任何类型的事务(支持ITransactionType)。我可以在单独的程序集中添加更多的事务类型,所有这些类型都可以在工厂工作,而无需重新编译(这是工厂的好处之一)。

这里有一个可以处理的事务类型的实际列表,因此我用const字符串定义了一个静态类,该类保存在单独的程序集中。其他程序集引用了此名称,以确保一致的事务类型名称。工厂不需要引用该程序集,因为它不需要知道,这将导致该项目的不必要的编译。

所有这些都很好。我永远不会在工厂项目中引用主列表程序集,因为它知道这没有任何意义。

但是,我担心如果该项目是由不了解所有这些内容的人来维护的,他们可能会错误地将引用添加到主列表程序集中。有什么方法可以防止添加此引用? IOW,如果有人(也许将来甚至是我自己)添加了引用,我是否可以通过某种方式强制执行编译错误,以指出为什么该行为 Not Acceptable 原因?

最佳答案

我可以想到几种方法,尽管据我所知,语言(.net,C#,vb)没有提供特定的方法:

  • 使用源代码控制(无论如何,还是应该使用),在编译后,从解决方案中卸载项目(右键单击>卸载), checkin 并标记为最终,只读或其他内容以防止进一步更改。
  • 添加一个微型脚本,该脚本执行预编译步骤,以检查不允许的引用(可以将其添加到项目属性下)。
  • 向您的源代码中添加一个#warning,该代码始终发出:“不应使用XXX编译”,请确保它不在其中。”
  • 对自身使用循环依赖项:在常量库中添加对Transaction工厂的引用,这将有效地防止以其他方式添加引用。
  • 有点讨厌:使用反射动态检查cctor(静态构造函数)中引用的存在,如果发现,则抛出异常。如果有人试图添加对该库的引用,这将引发硬异常(但仅在任何测试中)。
  • 也许更基本:在nUnit测试(或使用的任何测试框架)中,只需添加一个测试:MustNotReferenceXXX,并在其主体中动态检查是否引用了lib。

  • 如果可以想到更简单的方法,我将进行更新,尽管我认为第5点和第6点最容易实现,并且很容易被证明。

    关于.net - 阻止将特定的程序集添加到我的工厂项目中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1742456/

    相关文章:

    .net - 在部分信任程序集调用的受信任程序集中授予 FullTrust

    c# - 引用 dll 在 C# 中不起作用

    c# - Asp.Net C# 调用单个验证器

    c# - 有谁知道为什么我从 NHibernate/NH Profiler 收到这个警告?

    .net - 在CF 3.5中将音频作为流输入

    c# - 搜索用户并按 Redis 中最多的共同 friend 数量排序?

    c# - 如何从库中初始化一个类?

    .net - 如何更改程序集的公共(public) token

    c# - 你如何在 C++ 中调用 C# 方法?

    Python对象混淆 : a=b, 修改b和a的变化!