MSBuildで構築されたライブラリコードでコード契約を使用します
-
30-09-2019 - |
質問
使い始めました コード契約 私が書いているすべての新しいコードで、私がブートストラップを支援するために構築しているフレームワークライブラリなど 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
ファイル)および他のすべては正しく見えます、それは正しく動作しません。
だから、私は疑問に思っています:Visual Studio 2010の方法でMSBuildを実行するにはどうすればよいですか ccrewrite
それが想定されていることを行い、私の出力ディレクトリを散らさない .rewritten
と .pdb.original
ファイル?適切なコード契約を行うMSBUILDファイルがどのように見えるかの完璧な例を持っている人はいますか?
解決
答えはスクリプトにあります。 Visual Studioは、他の人を呼び出すMSBuildタスクを実行することです。できることの1つは、ツールに移動する|オプション|ビルド...そしてログをオンにして、アーティファクトを生成するものを何をするかを詳細に確認できることです。
そのような複雑で関与することをどのように行うでしょうか?読む MSBuildのガイド そのような ハシミP1 と パート2.
次に、以下のビルドのソースを掘ります。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets
そこにたどり着く最良の方法は、.csprojを開いてそれが含まれているものを見て、それを介して行くことです(.csharp.targetsは最初のものです - 私が引用したものはスタックの下にさらに下にあります)。
(それは、誰かが実際の答えで飛び込むのを待ちます!)
他のヒント
Code Contractの静的分析で少しプレイしましたが、かなりクールです。
今、TeamCityビルドをセットアップしようとしています...
ここは MSBUILD統合 Microsoft Researchからの情報(44ページを参照)