【问题标题】:Using Code Contracts in library code built with MSBuild在使用 MSBuild 构建的库代码中使用代码协定
【发布时间】:2010-08-24 07:45:59
【问题描述】:

我已经开始在我正在编写的所有新代码中使用Code Contracts,例如在我正在构建的框架库中,以帮助在 ASP.NET MVC 中引导 IoCO/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


    【解决方案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 是第一个 - 我引用的那个在堆栈中更靠后)。

    (然后等待某人弹出实际答案!)

    【讨论】:

      【解决方案2】:

      我玩过 Code Contract 的静态分析,它很酷。
      现在正在尝试设置 TeamCity 构建...

      这是来自 Microsoft Research 的 msbuild integration 信息(参见第 44 页)

      【讨论】:

        猜你喜欢
        • 2016-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-01
        • 1970-01-01
        • 2015-12-23
        • 1970-01-01
        相关资源
        最近更新 更多