在c# (VS-2010)中,如果使用某个库类,是否有一种方法可以使前端构建失败?(通常情况下,它会编译得很好?)

本文关键字:失败 构建 方法 前端 可以使 很好 编译 情况下 一种 如果 VS-2010 | 更新日期: 2023-09-27 18:05:16

我正在编写一个库,其中有一堆类,打算由多个前端使用(一些前端共享相同的类)。对于每个前端,我都保留了一个手工编辑的列表,其中列出了它使用的类(特定名称空间的类)。如果前端试图使用不在此列表中的类,则会出现运行时错误。我的目标是把这些错误移到编译时。

如果你们好奇的话,这些是"映射的"nhibernate类。我试图限制哪个前端可以使用什么,这样就有更少的启动时间,只是为了我自己的理智。最终会有成百上千这样的东西,如果有一个列表告诉我哪些前端使用了哪些我必须维护的东西,那就太好了。我似乎无法摆脱每个前端使用的子类,我不能使用任何包装类……就当这是理所当然的吧!

理想情况下,我希望visual studio强调红色的冒犯类,如果有人敢于尝试和使用他们,在错误窗口有一个很好的自定义错误。我也要他们从智能感应窗口消失。是否有可能定制一个项目来做这些事情?

我也愿意使用预构建程序来分析这些东西的代码,尽管这不是很好。有人知道有这样的工具吗?

感谢艾萨克

在c# (VS-2010)中,如果使用某个库类,是否有一种方法可以使前端构建失败?(通常情况下,它会编译得很好?)

假设您有一组类F。您希望这些类仅对某个程序集A可见。然后,您将F中的这些类分离成一个单独的程序集,并将它们标记为internal,并将该程序集上的InternalsVisibleTo设置为此特定程序集A的true。

如果您试图从包含F的程序集中使用A'中没有标记为InternalsVisibleTo的这些类,那么如果您试图在A'中使用F中的任何类,您将获得编译时错误。

我也希望他们从智能感知窗口消失。是否有可能定制一个项目来做这些事情?

这也发生在我上面提出的解决方案中。它们是包含F的程序集的内部,并且在包含F的程序集中没有标记为InternalsVisibleTo的程序集A'中不可见。

然而,我通常发现InternalsVisibleTo是一种代码气味(不是总是,只是经常)。

您应该将您的类分成单独的dll/项目,并且只向"适合"它的前端项目提供访问这些dll的权限。如果你的前端和它可能使用的类组在逻辑上是相关的,这应该很简单。

如果不是,那么我会说有些东西闻起来很可疑 -可能你的类设计/方法需要重新访问

我想你会想看一下ObsoleteAttribute: http://msdn.microsoft.com/en-us/library/system.obsoleteattribute%28v=VS.100%29.aspx

我相信你可以设置IsError为true,它会在构建时发出一个错误。

(非阳性)

对于智能感知,您可以使用EditorBrowseableAttribute: http://msdn.microsoft.com/en-us/library/system.componentmodel.editorbrowsableattribute.aspx或者至少当我添加服务引用并且无法看到成员时,这似乎得到了装饰。