在使用MSBuild生成的库代码中使用代码约定

在使用MSBuild生成的库代码中使用代码约定,msbuild,code-contracts,ccrewrite,Msbuild,Code Contracts,Ccrewrite,我已经开始在我正在编写的所有新代码中使用,比如在ASP.NET MVC应用程序中,我正在构建一个框架库来帮助引导,等等。我为这个框架库编写了一个简单的构建脚本,如下所示: @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=

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

@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
.rewrited
.csproj.FileListAbsolute.txt
文件完全重写的程序集,这些文件散落在输出目录中

首先在VisualStudio2010中构建解决方案,注释批处理文件中的第3行到第7行,然后再次运行它。然后,我得到了正确重写的程序集,没有
.pdb.original
.rewrited
文件

我由此推断,Visual Studio 2010以某种方式正确触发了代码约定重写器,因此命令行MSBuild调用将重新使用Visual Studio 2010生成的程序集,因此批处理脚本的基本功能就是将文件复制到生成目录。换言之,这是毫无用处的

我读过,但Jon的问题似乎与我的不同,因为显然,
ccrewrite
正在做一些事情,但不管出于什么原因,它都没有完成重写。
Integration.build
文件构建了正确的配置(在
.csproj
文件中启用了代码契约),其他一切看起来都正常,只是工作不正常


因此,我想知道:我如何以Visual Studio 2010的方式运行MSBuild,
ccrewrite
执行它应该执行的操作,并且不会在输出目录中乱放
.rewrited
.pdb.original
文件?有没有人有一个完美的例子来说明MSBuild文件如何进行正确的代码契约重写?

答案在脚本中。VisualStudio要做的就是运行将调用其他任务的MSBuild任务。您可以做的一件事是转到工具|选项|构建。。。并打开日志记录,以便详细查看哪个位正在执行生成工件的操作

一个人如何做如此复杂和复杂的事情?读如和

然后深入挖掘内置的源代码,例如:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets
最好的方法是打开你的.csproj,看看它包含了什么,然后通过它(第一个是.CSharp.targets,我引用的是在堆栈中的下一个)


(然后等待有人给出一个实际的答案!)

我对代码契约的静态分析做了一些研究,它非常酷。
现在正在尝试建立TeamCity build

以下是来自微软研究院的信息(见第44页)