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

ole*_*sii 32 c# code-contracts

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

代码合同 - >合同参考汇编:

  • 没有
  • 建立
  • DoNotBuild

有什么想法或建议吗?

Dav*_*rtz 35

合同参考大会是一种特殊的装配它保留在你的源代码文件中定义的任何代码合同.这是必要的,因为在编译时,代码契约"rewriter"(ccrewriter)删除或替换每个具有等效验证码的契约(Contract.Requires(someBool)可能被重写为if (!someBool) throw).

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

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

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

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

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

  • @orad错过了你的评论.是的,您可以将它们全部设置为"DoNotBuild".例如,如果您正在编写NuGet库并且希望安装它的人员看到其中的代码合同,则此功能应该是打开的. (2认同)

Hen*_*man 7

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

如果选择"无"并在带有合同的项目中引用库,则会出现"警告".
如果选择DoNotBuild,则不会收到警告.

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

  • 但是这个设置的重点是什么(以及这个"参考组件")? (3认同)