【发布时间】:2010-08-24 07:45:59
【问题描述】:
我已经开始在我正在编写的所有新代码中使用Code Contracts,例如在我正在构建的框架库中,以帮助在 ASP.NET MVC 中引导 IoC、O/RM 等应用。我为这个框架库编写了一个简单的构建脚本,如下所示:
@echo off
echo.
echo Cleaning build output (removing 'obj' and 'bin' folders)...
for /f "tokens=*" %%G in ('dir /b /ad /s bin') do rmdir /s /q "%%G"
for /f "tokens=*" %%G in ('dir /b /ad /s obj') do rmdir /s /q "%%G"
rmdir /s /q build
echo.
echo Starting the build...
call "%VS100COMNTOOLS%\vsvars32.bat"
msbuild Integration.build /target:Build
echo.
echo Done!
pause
这不起作用。如果我运行它,我最终在我的build 文件夹中得到的是,无论出于何种原因,程序集都没有被ccrewrite 以及.pdb.original、.rewritten 和.csproj.FileListAbsolute.txt 完全重写的文件在输出目录中乱扔垃圾.
首先在 Visual Studio 2010 中构建解决方案,注释掉批处理文件中的第 3 行到第 7 行,然后再次运行它。然后我得到了正确重写的程序集,没有.pdb.original 也没有.rewritten 文件。
我从中推断出,Visual Studio 2010 以某种方式正确地触发了代码合同重写器,因此来自 Visual Studio 2010 构建的结果程序集被命令行 MSBuild 调用重新使用,所以我的批处理脚本基本上是什么只是将文件复制到build 目录。换句话说,相当没用。
我读过this,但Jon 的问题似乎与我的不同,因为ccrewrite 显然在做某事,但它只是出于某种原因没有完成重写。 Integration.build 文件构建了正确的配置(在 .csproj 文件中启用了代码协定),其他一切看起来都正确,只是无法正常工作。
所以,我想知道:我如何以 Visual Studio 2010 的方式运行 MSBuild,ccrewrite 执行应有的操作,并且不会在我的输出目录中乱扔.rewritten 和.pdb.original 文件?有没有人有一个完美的例子来说明 MSBuild 文件如何进行正确的代码契约重写?
【问题讨论】:
标签: msbuild code-contracts ccrewrite