2010-08-24 64 views
3
内置

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

@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.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文件如何进行适当的代码合同重写?

回答

1

答案在脚本中。所有的Visual Studio将要做的是运行MSBuild任务来调用其他人。你可以做的一件事是去工具|选项|构建...并打开日志,以便您可以详细了解哪个位正在做什么来生成工件。

如何做这样一个复杂和涉及的事情?阅读a guide to MSBuild,如Hashimi p1Part 2

然后挖成如源编译:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets 

,以获得最佳的方式有打开你的.csproj并期待它包含并经由去(的.CSharp.targets是第一个 - 我引用的一个更深入)。

(也就是说,等待有人来与实际的答案在弹出!)

1

我已经打了代号合约的静态分析一点点,这是很酷。
现在试图建立的TeamCity构建...

下面是来自微软研究院msbuild integration信息(参见第44页)