代码之家  ›  专栏  ›  技术社区  ›  Asbjørn Ulsberg

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

  •  3
  • Asbjørn Ulsberg  · 技术社区  · 14 年前

    我已经开始使用 Code Contracts IoC O/RM 等,在ASP.NETMVC应用程序。我为这个框架库编写了一个简单的构建脚本,如下所示:

    @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 乱扔输出目录的文件。

    工作原理是首先在VisualStudio2010中构建解决方案,在批处理文件中注释掉第3行到第7行,然后再次运行它。然后我得到了正确重写的程序集 也不是

    我由此推断,VisualStudio2010以某种方式正确触发了代码约定重写器,因此VisualStudio2010生成的结果程序集被命令行MSBuild调用重新使用,因此批处理脚本基本上只需将文件复制到 目录。换句话说,相当无用。

    我读过 this CCR重写 显然是在做什么 某物 Integration.build 文件生成正确的配置(在 .csproj 文件)和其他一切看起来都是正确的,它只是不能正常工作。

    所以,我想知道:如何以VisualStudio2010的方式运行MSBuild 做它应该做的,不乱扔我的输出目录 .pdb.原件

    2 回复  |  直到 7 年前
        1
  •  1
  •   Community datashaman    7 年前

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

    a guide to MSBuild 例如 Hashimi p1 Part 2 .

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

    到达那里的最好方法是打开你的.csproj,看看它包含了什么,然后通过它(The.csproj)。CSharp.targets文件是第一个-我引用的那个更进一步)。

        2
  •  1
  •   sthiy    9 年前

    我已经玩了一点代码契约的静态分析,这是相当酷。
    正在尝试建立TeamCity build。。。

    这里是 msbuild integration