代码契约构建参考汇编操作

时间:2011-04-28 10:17:40

标签: c# code-contracts

我正在使用代码合同并试图了解我将使用哪些构建选项以及何时使用。合同装配构建选项在项目属性中定义

代码合同 - >合同参考大会

  • 构建
  • DoNotBuild

有任何想法或建议吗?

2 个答案:

答案 0 :(得分:35)

合同参考大会是一种特殊的程序集,它保留您在源代码文件中定义的任何代码合同。这是必要的,因为在编译时,代码合同的“重写器”(ccrewriter)使用等效的验证码删除或替换每个合同(Contract.Requires(someBool)可能会被重写为if (!someBool) throw)。

如果没有代码契约,如果稍后在不同的解决方案中引用已编译的程序集(而不是项目及其所有源代码文件),则可能不知道任何代码契约。如果已创建合同引用程序集,则IDE可以在静态分析期间考虑该程序集中的任何合同。

至于设置,这是他们的意思:

  • (none)表示您尚未进行选择,因此不会创建任何参考装配。如果另一个程序集依赖于此程序集并且您为其选择了Build,则可能会收到错误/警告“未找到任何合同引用程序集。”

  • 如果将设置更改为Build,将创建包含所有合同的参考装配。您将能够使用该程序集中定义的所有代码协定,就像您拥有源代码一样。如果您要创建一个将由第三方(例如NuGet包)或任何人在编译程序集后使用的库,请选择此项,这样他们就可以获得静态代码合同的好处分析

  • 如果您将设置更改为DoNotBuild,则不会构建任何参考程序集,同时保留您的代码合同。如果您不打算在其他任何地方使用此程序集,或者程序集的所有其他用户都可以访问源代码而不需要引用程序集,请选择此选项。它可能会加快构建速度。

答案 1 :(得分:7)

是的,None和DoNotBuild选项看起来有点奇怪。

如果您选择无并在带有合同的项目中引用库,您将收到警告 如果您选择DoNotBuild,则不会收到警告。

当然只有Build会生成一个引用组件,而对于.EXE来说,这一切都无关紧要。