問題タブ [ccrewrite]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net-4.0 - ccrewrite.exeがコマンドラインから何も実行しないのはなぜですか?
Visual Studio 2010内からコードコントラクトが正常に機能ccrewrite.exe
していますが、コマンドラインからは何もできません。サンプルアプリは次のとおりです。
次に、コードをコンパイルして、ccrewrite.exeを実行します。
RewrittenDummy.exe
その後、ファイルはありません。
たくさんのオプションを試しましたが、何も違いはありません。私が気づいたいくつかのこと:
- 存在しないファイルを指定すると死ぬので、間違いなくDummy.exeを読み込んでいます
- Dummy.exeには、Contractへの参照が確実に含まれています。引数なしで実行すると、適切に失敗します(ただし、書き直された場合に期待するように、エラーメッセージが入力されていません)。
- 事後条件と不変条件を使用しても違いはありません
警告と冗長性を上げてみましたが、まったく役に立ちません。何が間違っているのでしょうか。
(Code Contractsフォーラムでも質問されています。関連する回答はここに自分で追加します。)
.net-4.0 - CodeContracts:オブジェクト参照がオブジェクトのインスタンスに設定されていない状態でccrewriteが失敗する
以下のコードはccrewriteを爆破させます!アイデア?ところで、ActualClassをコメントアウトすると、ccrewriteは成功します...
前もって感謝します!
msbuild - MSBuild でビルドされたライブラリ コードでコード コントラクトを使用する
ASP.NET MVC アプリケーションでIoC、O/RMなどをブートストラップするために構築しているフレームワーク ライブラリなど、作成中のすべての新しいコードでCode Contractsの使用を開始しました。このフレームワーク ライブラリ用に、次のような簡単なビルド スクリプトを作成しました。
これはうまくいきません。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
か? 適切なコード コントラクトの書き換えを行う MSBuild ファイルがどのように見えるかを示す完璧な例はありますか?.rewritten
.pdb.original
.net - コードコントラクトの書き換えに失敗しました-libpathsの順序
私のソリューション/プロジェクトは、この特定のプロジェクトのコードコントラクトをオフにして正常にビルドされます。
プロジェクトで[ランタイムコントラクトチェックの実行]をオンにすると、ビルドが失敗します。CCリライターは、次の行に沿って何百ものメッセージを起動し始めます。
Could not resolve member reference: ....
この問題は、libpaths
引数を介してccrewriteに渡されるプロジェクト参照の順序が原因であると思われます。ビルドを分解してコマンドラインで実行すると、libpathsへの参照を特定の順序で手動で指定すると、ccrewriteが機能し、ビルドが完了します。
例えば
ccrewrite /level:4 /rewrite "/assemblyMode=standard" /throwonfailure /libpaths:"X Y Z" "target.dll" -- fails :(
ccrewrite /level:4 /rewrite "/assemblyMode=standard" /throwonfailure /libpaths:"Z Y X" "target.dll" -- compiles/rewrites :)
これは私には少し奇妙に思えます。特に、提供された「壊れた」順序は、msbuildがMicrosoft.CodeContracts.targetsファイル/ ccrewriteに渡すものであるため、ccrewriteは任意の順序を処理できるはずだと思いましたが、それはCCの人たちにとっての問題です。また、これを3つの異なるマシンでテストしたところ、同じ結果が得られたため、ccrewriteの問題か、この特定のcsprojでccrewriteが気に入らない奇妙な問題が発生しました。
私が疑問に思っているのは、CCターゲットファイルにチェーンに沿って渡される参照プロジェクトの特定の順序を確認できますか?ビルドエンジンは、プロジェクトのcsprojファイルで読み取る順序をItemGroup//ProjectReference
要素の下で使用すると想定していましたが、そうではありませんでした。
何か案は?
c# - Code Contracts を使用すると、ccrewrite がすべてのランタイム依存関係にアクセスする必要があるのはなぜですか?
コード コントラクトを使用しようとしていますが、ブロックされている問題が発生しています。コントラクト参照アセンブリをビルドに設定すると、直接参照されるアセンブリによって間接的に参照されるアセンブリにアクセスしようとすると、ccrewrite がエラーになります。これらの間接アセンブリはソリューションの構築には必要ありませんが、なぜコード コントラクトで必要なのか疑問に思っています。また、ビルドの一部としてすべてのランタイム依存関係を提供することなく、この問題を回避する方法はありますか?
msbuild - 「ランタイム コントラクト チェックの実行」が「フル」に設定されていると、コード化された ui テスト プロジェクトのビルドが失敗する
CodedUITestMethod が作成される単純なテスト プロジェクトがあります。テスト メソッドは、タスクバーの Windows スタート ボタンをクリックするだけです。このメソッドは、Visual Studio 2010 Ultimateのコード化された UI テスト ビルダーツールによって生成されます。
次に、プロジェクトの[プロパティ]ページの [コード コントラクト] タブに移動します。[ランタイム コントラクト チェックの実行]チェック ボックスをオンにします。Contract Reference Assemblyコンボ ボックスの値を "Build" に変更します。
F6 キーを押してプロジェクトをビルドすると、次の 2 つのエラーが表示されます。
C:\Program Files (x86)\Microsoft\Contracts\MsBuild\v4.0\Microsoft.CodeContracts.targets (240,5): エラー MSB3073: コマンド ""C:\Program Files (x86)\Microsoft\Contracts\ Bin\ ccrewrite" "@CodedUITest_Contract2ccrewrite.rsp"" はコード -1 で終了しました。
プロジェクトの zip ファイルをcodeplex プロジェクトにアップロードしました
誰かがプロジェクトをダウンロードして、コンパイル エラーを再現できるかどうかを確認できますか? ありがとう。
.net - CONTRACT_FULL が定義されていますが、定義がどこにも見つかりません
現在、.NET フレームワークのコード コントラクトを調べています。私がやりたいのは、同僚が Visual Studio に必要な拡張機能をインストールしてそのまま作業を続けることを強制されることを避けながら、これらのコントラクトを使用することです。
コントラクトを使用していくつかのメソッドをセットアップし、実行されたアプリケーションから、CONTRACT_FULL
シンボルは定義されているがリライターが呼び出されていないというメッセージを受け取ります。プロジェクト全体を確認しましたが、このシンボルはどこにも定義されていません。この定義はどこから来て、どうすればそれを取り除くことができますか?
コントラクト リライターを有効にすると、このエラーは発生しなくなりますが、前述したように、このリライターをインストールする必要はありません。
c# - 「Contract.Requires」はどのように機能しますか" ccrewrite なしで動作しますか? これは "Requires" とは異なりますか?
ccrewrite を使用しない場合(たとえば、CC がインストールされていない別の開発者によってプロジェクトがビルドされた場合)、
Contract.Requires<T>(cond)
静かに削除されますか、それとも と同等の動作になりif (!cond) { throw new T() }
ますか? (別のメソッド呼び出しか 2 つかは気にしませんが、「常にチェックする」必要があります。)
Contract.Requires<T>
とは動作が異なるように見えるので質問しますがContract.Requires
、「どのように」または「いつ」かわかりません。
目標は、公共契約の構造を置き換えることです
ビルドステップ中にCC書き換えを実行しない場合でも例外をスローするCC互換バージョン。
上記はEndContractBlock
「カスタムパラメーター検証」(つまり、レガシーコントラクトモード) で機能しますが、プロジェクトで「標準コントラクトが必要」を使用したいと思います。
「カスタムパラメーター検証」モードでは使用できないため、同等性があると思いますRequires<T>
。常に必要なチェックに相当するものがない場合は、その理由についての洞察があればよいでしょう。
私は、静的分析のためにそれらを評価するので、CC の書き換えが行われないときにRequires
、 、Ensures
、および不変の不変コントラクト メソッドとインターフェイス コントラクトを失うことは問題ありませんが、CC を維持することを主張するには、常に存在する境界チェックが必要です。