C# 在.net 4.0中使用codeContracts而不影响其他开发人员

C# 在.net 4.0中使用codeContracts而不影响其他开发人员,c#,.net,code-contracts,C#,.net,Code Contracts,我不熟悉codeContracts,我喜欢它,因为它看起来很干净 我不喜欢这样的事实,我需要下载一个库来让它工作。我不明白为什么微软没有把它作为整个框架的一部分 我不想强迫团队中的其他同事下载它 问题: 我是否可以下载扩展并将DLL添加到构建中,这样,如果他们获得最新版本或正在使用它,他们就无事可做了 在部署包含Codecontracts的应用程序之前,有什么需要知道的吗 感谢.NET 4.0中的,您无需下载或向项目中添加任何库即可将代码契约添加到代码中。您下载的部分是用于静态分析和ccrewr

我不熟悉codeContracts,我喜欢它,因为它看起来很干净

我不喜欢这样的事实,我需要下载一个库来让它工作。我不明白为什么微软没有把它作为整个框架的一部分

我不想强迫团队中的其他同事下载它

问题:

我是否可以下载扩展并将DLL添加到构建中,这样,如果他们获得最新版本或正在使用它,他们就无事可做了

在部署包含Codecontracts的应用程序之前,有什么需要知道的吗


感谢.NET 4.0中的

,您无需下载或向项目中添加任何库即可将代码契约添加到代码中。您下载的部分是用于静态分析和ccrewrite的工具。如果您使用的是较旧版本的.NET,我建议您在开始使用代码契约之前升级到4.0

只要您只使用静态分析功能(静态契约检查),就可以在不直接干扰其他开发人员的开发过程的情况下使用它(请继续阅读)。在这种情况下,编译或部署方面没有任何变化

如果您打算启用执行运行时契约检查,那么您应该让团队中的每个人都使用这些工具。您还应该确保生成服务器能够生成与本地VisualStudio相同的结果。这是因为一旦启用该特性,代码契约就开始影响运行时行为。显然,每个人的代码行为都必须相同

即使您现在决定只使用静态特性,但没有让团队中的每个人都使用这些工具也有一个缺点:他们将无法正确维护使用代码契约的代码。重构可能需要对契约进行更改,但如果没有工具,它们可能会在不经意间引入大量警告,如果您是唯一一个使用这些工具的人,那么您必须修复这些警告


也就是说,我在共享代码库的特定部分使用了代码契约,而团队的其他成员在使用它们时没有任何重大问题。当然,您仍然应该和您的同事讨论这个问题,这样他们在维护代码时就不会遇到任何意外。我使用代码契约迫使他们做一些额外工作的唯一情况是,当他们向我定义契约的接口添加方法时。契约位于实现该接口的抽象类中,这意味着他们必须将该新方法的最小实现添加到抽象类中。

在.NET 4.0中,为了能够将代码契约添加到代码中,您不需要下载或向项目中添加任何库。您下载的部分是用于静态分析和ccrewrite的工具。如果您使用的是较旧版本的.NET,我建议您在开始使用代码契约之前升级到4.0

只要您只使用静态分析功能(静态契约检查),就可以在不直接干扰其他开发人员的开发过程的情况下使用它(请继续阅读)。在这种情况下,编译或部署方面没有任何变化

如果您打算启用执行运行时契约检查,那么您应该让团队中的每个人都使用这些工具。您还应该确保生成服务器能够生成与本地VisualStudio相同的结果。这是因为一旦启用该特性,代码契约就开始影响运行时行为。显然,每个人的代码行为都必须相同

即使您现在决定只使用静态特性,但没有让团队中的每个人都使用这些工具也有一个缺点:他们将无法正确维护使用代码契约的代码。重构可能需要对契约进行更改,但如果没有工具,它们可能会在不经意间引入大量警告,如果您是唯一一个使用这些工具的人,那么您必须修复这些警告


也就是说,我在共享代码库的特定部分使用了代码契约,而团队的其他成员在使用它们时没有任何重大问题。当然,您仍然应该和您的同事讨论这个问题,这样他们在维护代码时就不会遇到任何意外。我使用代码契约迫使他们做一些额外工作的唯一情况是,当他们向我定义契约的接口添加方法时。契约在一个实现该接口的抽象类中,这意味着他们必须向抽象类中添加该新方法的最小实现。

我在一个大型开发团队中使用代码契约已有几年了,在整个代码库中占用的空间有限

一旦您确定了要从中使用什么(例如,重写级别/静态分析配置等),我建议卸载代码契约,并将其副本签入源代码管理。这将使您的代码在每个人的机器上构建,包括构建服务器。它还允许您删除“未找到项目“xxx”的合同引用程序集。请在项目设置中为合同引用选择“Build”或“DoNotBuild”警告,而不更改其他所有人的项目。它还将降低重写器不运行的风险,因为在未安装代码契约的情况下完成构建,这可能导致在运行时出现警告。这样做会错过项目配置选项卡和代码编辑器增强功能(如果它们一开始对您有用的话)

如果您在多个项目上使用它,我还建议将标准化配置放在目标文件中,以便在它们之间共享(使配置选项卡有点冗余)

如果你决定使用静态分析,我会让你改变主意