问题标签 [ccrewrite]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5966 浏览

.net-4.0 - 为什么 ccrewrite.exe 没有从命令行执行任何操作?

我在 Visual Studio 2010 中的代码合同工作正常,但我无法ccrewrite.exe从命令行做任何有用的事情。这是一个示例应用程序:

然后我编译代码并在其上运行 ccrewrite.exe:

之后就没有RewrittenDummy.exe文件了。

我已经尝试了很多选项,但没有任何区别。我注意到的几件事:

  • 它肯定在加载 Dummy.exe,因为如果我指定一个不存在的文件,它就会死掉
  • Dummy.exe 肯定包含对 Contract 的引用——如果我在没有参数的情况下运行它,它会适当地失败(但如果它被重写,错误消息没有像我预期的那样被填写)
  • 使用后置条件和不变量没有区别

我试过调高警告和冗长,但这根本没有帮助我做错了什么?

(也在代码合同论坛中作为问题提出。我将自己在这里添加任何相关答案。)

0 投票
1 回答
535 浏览

.net-4.0 - CodeContracts:ccrewrite 失败,对象引用未设置为对象的实例

下面的代码让 ccrewrite 爆炸了!想法?顺便说一句,如果您注释掉 ActualClass,则 ccrewrite 成功...

提前致谢!

0 投票
2 回答
1946 浏览

msbuild - 在使用 MSBuild 构建的库代码中使用代码协定

我已经开始在我正在编写的所有新代码中使用代码契约,例如在我正在构建的框架库中,以帮助在 ASP.NET MVC 应用程序中引导IoCO/RM等。我为这个框架库编写了一个简单的构建脚本,如下所示:

这行不通。如果我运行它,我最终在我的build文件夹中得到的是,无论出于何种原因,没有完全重写的程序集,以及ccrewrite在输出目录中乱扔垃圾的文件。.pdb.original.rewritten.csproj.FileListAbsolute.txt

起作用的是首先在 Visual Studio 2010 中构建解决方案,在批处理文件中注释掉第 3 行到第 7 行并再次运行它。然后我得到了正确重写的程序集,没有.pdb.original文件.rewritten

我从中推断的是,Visual Studio 2010 以某种方式正确地触发了代码合同重写器,因此来自 Visual Studio 2010 构建的结果程序集被命令行 MSBuild 调用重新使用,所以我的批处理脚本基本上只是将文件复制到build目录。换句话说,相当没用。

我读过这个,但乔恩的问题似乎与我的不同,因为ccrewrite显然是在做某事,但无论出于何种原因,它都没有完成重写。该Integration.build文件构建了正确的配置(在.csproj文件中启用了代码合同),其他一切看起来都正确,只是无法正常工作。

所以,我想知道:如何以 Visual Studio 2010 的方式运行 MSBuild,ccrewrite并且不会在输出目录中乱扔.rewritten文件.pdb.original?有没有人有一个完美的例子来说明 MSBuild 文件如何进行正确的代码合同重写?

0 投票
1 回答
512 浏览

.net - 代码合同重写失败 - libpaths 顺序

我的解决方案/项目在关闭此特定项目的代码合同的情况下构建良好。

当我在我的项目上打开执行运行时合同检查时,构建失败。CC 重写器开始启动数百条消息,如下所示:

Could not resolve member reference: ....

看来这个问题是由通过libpaths参数传递给 ccrewrite 的项目引用的顺序引起的。当我将构建分开并在命令行上运行它时,我以特定顺序手动指定对 libpaths 的引用,ccrewrite 工作,构建完成。

例如

ccrewrite /level:4 /rewrite "/assemblyMode=standard" /throwonfailure /libpaths:"X Y Z" "target.dll" -- fails :(

ccrewrite /level:4 /rewrite "/assemblyMode=standard" /throwonfailure /libpaths:"Z Y X" "target.dll" -- compiles/rewrites :)

这对我来说似乎有点奇怪,我认为 ccrewrite 应该能够处理任意排序,特别是因为提供的“损坏”排序是 msbuild 传递给 Microsoft.CodeContracts.targets 文件/ccrewrite 的一个,但是那是CC家伙的问题。我还在 3 台不同的机器上对此进行了测试,结果相同,因此它要么是 ccrewrite 问题,要么是 ccrewrite 不喜欢的特定 csproj 中的一些奇怪的东西。

我想知道的是,我可以确保我的参考项目的特定顺序,沿着链传递到 CC 目标文件吗?我会假设构建引擎将使用它在项目 csproj 文件中读取的顺序,在ItemGroup//ProjectReference元素下,但事实并非如此。

有任何想法吗?

0 投票
2 回答
712 浏览

c# - 使用代码契约,为什么 ccrewrite 需要访问每个运行时依赖项?

我正在尝试使用代码合同,但遇到了一个阻碍我的问题。将 Contract Reference Assembly 设置为 Build 时,ccrewrite 在尝试访问由直接引用的程序集间接引用的程序集时出错。构建解决方案不需要这些间接程序集,所以我想知道为什么代码合同需要它们?此外,有没有办法解决这个问题,而不必提供所有运行时依赖项作为构建的一部分?

0 投票
1 回答
957 浏览

msbuild - 当“执行运行时合同检查”设置为“完整”时,构建编码的 ui 测试项目失败

我有一个简单的测试项目,其中创建了 CodedUITestMethod。测试方法只需单击任务栏中的 Windows 开始按钮。该方法由 Visual Studio 2010 Ultimate中的Coded UI Test Builder工具生成。

然后,我转到项目的Properties页面,Code Contracts选项卡。选中执行运行时合同检查复选框。将Contract Reference Assembly组合框的值更改为“Build”。

现在我按 F6 来构建项目并收到 2 个错误:读取程序集“Microsoft.VisualStudio.TestTools.UITesting”导致错误。

C:\Program Files (x86)\Microsoft\Contracts\MsBuild\v4.0\Microsoft.CodeContracts.targets (240,5): error MSB3073: The command ""C:\Program Files (x86)\Microsoft\Contracts\ Bin\ ccrewrite" "@CodedUITest_Contract2ccrewrite.rsp"" 以代码 -1 退出。

我已将我的项目 zip 文件上传到我的 codeplex 项目

有人可以下载该项目并查看他们是否可以重现编译错误吗?谢谢。

0 投票
1 回答
229 浏览

.net - CONTRACT_FULL 已定义,但定义无处可寻

我目前正在研究 .NET 框架的代码合同。我想做的是使用这些合同,同时避免我的同事被迫安装 Visual Studio 所需的扩展并继续按原样工作。

Aber 使用合约设置一些方法,并从已执行的应用程序接收消息,说明CONTRACT_FULL已定义符号但未调用重写器。我检查了我的整个项目,这个符号没有在任何地方定义。这个定义来自哪里,我该如何摆脱它?

如果激活合同重写器,此错误会消失,但正如我所说,我想避免安装此重写器的需要。

0 投票
2 回答
572 浏览

rest - 为什么我的 WebAPI REST 方法在周末坏了?

我有一些简单的 WebAPI 模型/存储库/控制器。

我能够使用以下浏览器在浏览器中测试这些星期五:

...这将在浏览器页面中返回测试部门的数据。

但是,现在,同样的尝试失败了:

在此处输入图像描述

真的是这样吗?我需要跳过这些障碍,上周我的简单测试什么时候运行良好?

0 投票
1 回答
1963 浏览

c# - “Contract.Requires”如何" 没有 ccrewrite 的行为?这与 "Requires" 有什么不同吗?

使用 ccrewrite时(假设项目是由另一个未安装 CC 的开发人员构建的),

Contract.Requires<T>(cond)默默地被剥离还是仍然导致等同于的行为if (!cond) { throw new T() }?(我不在乎它是否是另一个或两个方法调用 - 但它应该“总是被检查”。)

我问是因为Contract.Requires<T>看起来与 的行为不同Contract.Requires,但我不确定“如何”或“何时”。

目标是取代公共合同的结构

与 CC 兼容的版本在构建步骤期间不执行 CC 重写时仍会引发异常。

虽然上述EndContractBlock与“自定义参数验证”(即遗留合同模式)一起使用,但我想在项目中使用“标准合同要求”。

我相信可能存在等效性,因为在“自定义参数验证”模式下我无法使用Requires<T>;如果没有与始终需要的检查等效的内容,那么了解为什么会很好。

当 CC 重写未完成时,我很好地丢失了Requires, Ensures,并留下了非兑现的不变契约方法和接口契约,因为我重视它们以进行静态分析 - 但我需要这些始终存在的边界检查来争论保留 CC。

0 投票
0 回答
727 浏览

c# - 代码合同:ccrewrite 退出,代码为 -1073741571

我使用代码合同和 VS 2013 的本地构建很好,但在构建服务器上我得到下一个错误: MSB3073: C:\Program Files (x86)\Microsoft\Contracts\MsBuild\v14.0\Microsoft.CodeContracts.targets(642,5): The command ""C:\Program Files (x86)\Microsoft\Contracts\Bin\ccdocgen.exe" "@obj\Release\QuickGraphccdocgen.rsp"" exited with code -1073741571.

我该如何解决?

我知道这篇文章,并且 -1073741571 是堆栈溢出/耗尽的代码。我的问题是什么可能是问题的原因。为什么本地构建工作正常但远程不工作?

谢谢。