Использование контрактов кода в библиотечном коде, созданном с помощью MSBuild - PullRequest
3 голосов
/ 24 августа 2010

Я начал использовать Кодовые контракты во всем новом коде, который я пишу, например, в библиотеке фреймворка, которую я создаю, чтобы помочь при начальной загрузке 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, .rewritten и .csproj.FileListAbsolute.txt, которые засоряют выходной каталог .

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

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

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

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

Ответы [ 2 ]

1 голос
/ 27 августа 2010

Я немного поиграл со статическим анализом Code Contract, и это довольно круто.
Сейчас пытаюсь настроить сборку TeamCity ...

Вот интеграция msbuild информация от Microsoft Research (см. Стр. 44)

1 голос
/ 24 августа 2010

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

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

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

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

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

(Вот и ждите, пока кто-нибудь ответит с реальным ответом!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...