问题标签 [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.
.net-4.0 - 为什么 ccrewrite.exe 没有从命令行执行任何操作?
我在 Visual Studio 2010 中的代码合同工作正常,但我无法ccrewrite.exe
从命令行做任何有用的事情。这是一个示例应用程序:
然后我编译代码并在其上运行 ccrewrite.exe:
之后就没有RewrittenDummy.exe
文件了。
我已经尝试了很多选项,但没有任何区别。我注意到的几件事:
- 它肯定在加载 Dummy.exe,因为如果我指定一个不存在的文件,它就会死掉
- Dummy.exe 肯定包含对 Contract 的引用——如果我在没有参数的情况下运行它,它会适当地失败(但如果它被重写,错误消息没有像我预期的那样被填写)
- 使用后置条件和不变量没有区别
我试过调高警告和冗长,但这根本没有帮助我做错了什么?
(也在代码合同论坛中作为问题提出。我将自己在这里添加任何相关答案。)
.net-4.0 - CodeContracts:ccrewrite 失败,对象引用未设置为对象的实例
下面的代码让 ccrewrite 爆炸了!想法?顺便说一句,如果您注释掉 ActualClass,则 ccrewrite 成功...
提前致谢!
msbuild - 在使用 MSBuild 构建的库代码中使用代码协定
我已经开始在我正在编写的所有新代码中使用代码契约,例如在我正在构建的框架库中,以帮助在 ASP.NET MVC 应用程序中引导IoC、O/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 文件如何进行正确的代码合同重写?
.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
元素下,但事实并非如此。
有任何想法吗?
c# - 使用代码契约,为什么 ccrewrite 需要访问每个运行时依赖项?
我正在尝试使用代码合同,但遇到了一个阻碍我的问题。将 Contract Reference Assembly 设置为 Build 时,ccrewrite 在尝试访问由直接引用的程序集间接引用的程序集时出错。构建解决方案不需要这些间接程序集,所以我想知道为什么代码合同需要它们?此外,有没有办法解决这个问题,而不必提供所有运行时依赖项作为构建的一部分?
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 项目
有人可以下载该项目并查看他们是否可以重现编译错误吗?谢谢。
.net - CONTRACT_FULL 已定义,但定义无处可寻
我目前正在研究 .NET 框架的代码合同。我想做的是使用这些合同,同时避免我的同事被迫安装 Visual Studio 所需的扩展并继续按原样工作。
Aber 使用合约设置一些方法,并从已执行的应用程序接收消息,说明CONTRACT_FULL
已定义符号但未调用重写器。我检查了我的整个项目,这个符号没有在任何地方定义。这个定义来自哪里,我该如何摆脱它?
如果激活合同重写器,此错误会消失,但正如我所说,我想避免安装此重写器的需要。
rest - 为什么我的 WebAPI REST 方法在周末坏了?
我有一些简单的 WebAPI 模型/存储库/控制器。
我能够使用以下浏览器在浏览器中测试这些星期五:
...这将在浏览器页面中返回测试部门的数据。
但是,现在,同样的尝试失败了:
真的是这样吗?我需要跳过这些障碍,上周我的简单测试什么时候运行良好?
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。
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 是堆栈溢出/耗尽的代码。我的问题是什么可能是问题的原因。为什么本地构建工作正常但远程不工作?
谢谢。