如果在应用程序中使用代码契约,那么我们是否需要在生产服务器上安装任何东西(来自代码契约包),例如将程序集放入 GAC 或在生产服务器上运行代码契约安装包?
或者只是将库放在 bin 文件夹中会起作用?
如果在应用程序中使用代码契约,那么我们是否需要在生产服务器上安装任何东西(来自代码契约包),例如将程序集放入 GAC 或在生产服务器上运行代码契约安装包?
或者只是将库放在 bin 文件夹中会起作用?
将它们放在 bin/ 文件夹中就足够了。
几周前做了这样的事情,我下载了一个图表引擎的试用版,将 .dll 放在我的 lib 文件夹中,并在我的网络项目中添加了对它们的引用。
当我们部署网站时,我们曾经在 Visual Studio 中使用“发布”选项,因此我们可以上传一个漂亮、干净的构建(现在我们有一个构建服务器)。
这一切都很完美,直到我们决定购买该组件,我安装了它,并将我们移动/安装的所有程序集添加到 GAC。我拿了这些程序集并将它们放在我们的 lib 文件夹中并重新添加了引用。
在我们决定使用新的图表引擎程序集发布项目更新之前,我们一切正常。该网站停止工作!:(
经过一段时间的调试,我们发现错误是图表引擎的新 .dll 没有输出到 bin 文件夹,因为它们在 GAC 中。但是当我们发布到我们的服务器时,它们不存在,所以为了解决这个问题,我们只是将它们复制过来,一切都再次像魅力一样工作。
从您问题中链接的代码合同网站:
合同充当您的外部和内部 API 的检查文档。合约用于通过运行时检查改进测试、启用静态合约验证和文档生成。
如果我错了,请纠正我,但我认为代码合同只是为了开发时的帮助而设计的。因此,假设您在编译用于部署/生产的程序集时将禁用它们。
我意识到这是一个较旧的线程,但这个问题仍然是一个有效的问题......
假设使用 .NET 4.0,System.Diagnostics.Contract 类已经包含在 mscorlib.dll 中。因此,您需要在任何地方安装 .NET 4.0 运行时。
您只需将 CodeContracts 包安装到开发机器和将二进制文件编译为 IL 的任何其他机器(即通过 VisualStudio、使用 csc.exe 的 msbuild - C# 编译器等)。该安装包中包含多个 .exe。其中之一是“ccrewrite.exe”。这是一个 IL 重写器,可在编译器完成后将IL 代码注入您的程序集中。请注意,您使用的任何语言的 ccrewrite 和 .NET 编译器都没有关联、连接或共享任何依赖项。
一旦您的二进制文件被编译,就无需安装或部署任何东西到您的代码将执行的任何服务器。无论您在项目设置中配置的选项如何,都是如此:
CodeContract 参考程序集仅在您需要将合同公开给解决方案之外的库/API 并且为该项目启用静态检查时使用。您也不应该直接引用它们,也不需要任何类型的构建后步骤将它们复制到任何 bin 文件夹中(除了我刚才提到的将它们暴露给另一个库/API 的情况)。
高温高压