代码契约构建引用程序集操作

本文关键字:程序集 操作 引用 构建 契约 代码 | 更新日期: 2023-09-27 17:53:21

我正在使用代码契约,并试图理解我应该使用哪个构建选项以及何时使用。合同程序集生成选项在项目属性

中定义。

代码契约->契约引用程序集:

  • 构建
  • DoNotBuild

有什么想法或建议吗?

代码契约构建引用程序集操作

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

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

至于设置,它们的意思是:

  • (none)表示您没有做出选择,因此不会创建参考程序集。如果另一个程序集依赖于此程序集,并且您为其选择了Build,则可能会收到"未找到契约引用程序集"的错误/警告。

  • 如果您将设置更改为Build,将创建包含所有契约的参考程序集。您将能够使用该程序集中定义的所有代码契约,就像您拥有源代码一样。如果您正在创建一个库,该库将被第三方(例如NuGet包)或任何人在程序集编译后使用,那么他们将在静态分析中受益于您的代码契约。

  • 如果您将设置更改为DoNotBuild,则不会构建任何引用程序集来保留您的代码契约。如果您不打算在其他任何地方使用此程序集,或者该程序集的所有其他用户都可以访问源代码而不需要引用程序集,请选择此选项。

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

如果您选择None并在带有契约的Project中引用库,您将得到一个警告。
如果你选择了DoNotBuild,你将不会得到一个警告。

当然,只有Build生成一个参考文件,而对于。exe来说,这一切都无关紧要。