2010-08-24 2 views
3

Я начал использовать Code Contracts во всем новом коде, который я пишу, например, в библиотеке фреймов, которую я создаю, чтобы помочь загрузочному IoC, O/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 файлами, которые засоряют выходной каталог.

Что делает работа, сначала создавая решение в Visual Studio 2010, комментируя строку с 3 по 7 в пакетном файле и запуская ее снова. Затем я заканчиваю правильно переписанными сборками и не .pdb.original, ни .rewritten.

Что я понял из этого, так это то, что Visual Studio 2010 каким-то образом запускает переписывающий код контракта, поэтому результирующие сборки из сборки Visual Studio 2010 повторно используются вызовом MSBuild из командной строки, так что мой пакетный скрипт в основном это просто копирование файлов в каталог build. Другими словами, это бесполезно.

Я прочитал this, но проблема Джона, кажется, отличается от моего, так как ccrewrite очевидно, делает что-то , но это просто не завершая перезапись по какой-либо причине. Файл Integration.build создает правильную конфигурацию (с кодовыми контрактами, включенными в файлы .csproj), и все остальное выглядит правильно, это просто не работает должным образом.

Итак, я задаюсь вопросом: Как запустить MSBuild путь Visual Studio 2010, где ccrewrite делает то, что он должен и не засоряет мой выходной каталог с .rewritten и .pdb.original файлов? Есть ли у кого-нибудь прекрасный пример того, как выглядит файл MSBuild, выполняющий надлежащую перестройку кода контракта?

ответ

1

Ответ в скрипте. Все Visual Studio когда-либо собирается выполнять задачи MSBuild, которые будут вызывать других. Одна вещь, которую вы можете сделать, это перейти в Tools | Options | Build ... и включить ведение журнала, чтобы вы могли подробно видеть, какой бит выполняет то, что нужно для создания артефактов.

Как сделать такую ​​сложную и привлекательную вещь? Прочитайте a guide to MSBuild, например Hashimi p1 и Part 2.

Затем вырыть в источник для сборки в например:

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

Лучший способ добраться туда, чтобы открыть .csproj и посмотреть, что она включает в себя и идти через что (в .CSharp.targets является первый - тот, который я привел, идет дальше по стеку).

(Это и ждать, чтобы кто-то всунуть с фактическим ответом!)

1

Я играл немного с статического анализа кода Контракта, и это очень здорово.
Сейчас пытаются создать Teamcity построить ...

Вот msbuild integration информация от Microsoft Research (см 44)

Смежные вопросы