Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在web项目中使用代码契约将如何影响部署?_.net_Deployment_Code Contracts - Fatal编程技术网

.net 在web项目中使用代码契约将如何影响部署?

.net 在web项目中使用代码契约将如何影响部署?,.net,deployment,code-contracts,.net,Deployment,Code Contracts,若在应用程序中使用,那个么我们是否需要在生产服务器上安装任何东西(来自代码契约包),比如将程序集放入GAC或在生产服务器上运行代码契约安装包 或者只是将库放在bin文件夹中就行了?将它们放在bin/文件夹中就足够了 几周前我做了类似的事情,我下载了一个图表引擎的试用版,将.dll放在我的lib文件夹中,并在我的web项目中添加了对它们的引用 当我们部署一个网站时,我们曾经在VisualStudio中使用“发布”选项,这样我们就可以上传一个漂亮、干净的构建(现在我们有了一个构建服务器) 在我们决定

若在应用程序中使用,那个么我们是否需要在生产服务器上安装任何东西(来自代码契约包),比如将程序集放入GAC或在生产服务器上运行代码契约安装包


或者只是将库放在bin文件夹中就行了?

将它们放在bin/文件夹中就足够了

几周前我做了类似的事情,我下载了一个图表引擎的试用版,将.dll放在我的lib文件夹中,并在我的web项目中添加了对它们的引用

当我们部署一个网站时,我们曾经在VisualStudio中使用“发布”选项,这样我们就可以上传一个漂亮、干净的构建(现在我们有了一个构建服务器)

在我们决定购买该组件之前,这一切都非常有效,我安装了它,并将所有我们移动/安装的组件添加到GAC中。我把程序集放在我们的lib文件夹中,并重新添加了引用

在我们决定使用新的图表引擎程序集发布项目更新之前,我们的一切都正常工作。站点停止工作!:(


经过一小段时间的调试,我们发现错误是新的。图表引擎的DLL没有输出到bin文件夹,因为它们在GAC中。但是当我们发布到服务器时,它们不在那里,所以为了解决问题,我们只是复制了它们,一切都再次正常工作。

来自代码合同网站linkd在你的问题中:

合同充当检查文档 您的外部和内部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编译器都是不相关的、连接的或sh没有任何依赖项

编译二进制文件后,无需将任何内容安装或部署到代码将在其中执行的任何服务器上。无论您在项目设置中配置了哪些选项,这都是正确的

  • 使用运行时契约检查
  • 使用静态契约检查
  • 配置为生成CodeContract引用程序集(您也不需要部署这些程序集)
  • 等等
CodeContract引用程序集仅在您需要将合同公开给解决方案之外的库/API且该项目已启用静态检查时使用。您也不应直接引用它们,也不需要任何类型的生成后步骤将其复制到任何bin文件夹中(除了我刚才提到的向另一个库/API公开它们的情况)