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