gpt4 book ai didi

msbuild - 在使用 MSBuild 构建的库代码中使用代码契约

转载 作者:行者123 更新时间:2023-12-02 16:06:01 26 4
gpt4 key购买 nike

我已经开始使用Code Contracts在我正在编写的所有新代码中,例如在我正在构建以帮助引导的框架库中 IoC , O/RM等,在 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 一起完全重写。 .rewriting.csproj.FileListAbsolute.txt 文件散布在输出目录中。

有效的方法是首先在 Visual Studio 2010 中构建解决方案,注释掉批处理文件中的第 3 行到第 7 行,然后再次运行它。然后,我最终得到正确重写的程序集,并且没有 .pdb.original 也没有 .rewriting 文件。

我从中推断出,Visual Studio 2010 以某种方式正确触发了代码契约重写器,因此 Visual Studio 2010 构建生成的程序集被命令行 MSBuild 调用重新使用,所以我的批处理脚本基本上是这样的所做的只是将文件复制到 build 目录。换句话说,相当无用。

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

所以,我想知道:如何以 Visual Studio 2010 的方式运行 MSBuild,其中 ccrewrite 执行其应有的操作,并且不会在我的输出目录中乱扔 .rewriting.pdb.original 文件?有谁有一个完美的示例来说明 MSBuild 文件如何进行正确的代码契约重写?

最佳答案

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

如何做如此复杂且复杂的事情?阅读 a guide to MSBuildHashimi p1Part 2 .

然后深入研究构建的源代码,例如:

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

到达那里的最好方法是打开你的 .csproj 并查看它包含的内容并通过它(.CSharp.targets 是第一个 - 我引用的那个位于堆栈的更下方)。

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

关于msbuild - 在使用 MSBuild 构建的库代码中使用代码契约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3554426/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com