問題タブ [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.

0 投票する
1 に答える
5966 参照

.net-4.0 - ccrewrite.exeがコマンドラインから何も実行しないのはなぜですか?

Visual Studio 2010内からコードコントラクトが正常に機能ccrewrite.exeしていますが、コマンドラインからは何もできません。サンプルアプリは次のとおりです。

次に、コードをコンパイルして、ccrewrite.exeを実行します。

RewrittenDummy.exeその後、ファイルはありません。

たくさんのオプションを試しましたが、何も違いはありません。私が気づいたいくつかのこと:

  • 存在しないファイルを指定すると死ぬので、間違いなくDummy.exeを読み込んでいます
  • Dummy.exeには、Contractへの参照が確実に含まれています。引数なしで実行すると、適切に失敗します(ただし、書き直された場合に期待するように、エラーメッセージが入力されていません)。
  • 事後条件と不変条件を使用しても違いはありません

警告と冗長性を上げてみましたが、まったく役に立ちません。何が間違っているのでしょうか。

Code Contractsフォーラムでも質問されています。関連する回答はここに自分で追加します。)

0 投票する
1 に答える
535 参照

.net-4.0 - CodeContracts:オブジェクト参照がオブジェクトのインスタンスに設定されていない状態でccrewriteが失敗する

以下のコードはccrewriteを爆破させます!アイデア?ところで、ActualClassをコメントアウトすると、ccrewriteは成功します...

前もって感謝します!

0 投票する
2 に答える
1946 参照

msbuild - MSBuild でビルドされたライブラリ コードでコード コントラクトを使用する

ASP.NET MVC アプリケーションでIoCO/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

0 投票する
1 に答える
512 参照

.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要素の下で使用すると想定していましたが、そうではありませんでした。

何か案は?

0 投票する
2 に答える
712 参照

c# - Code Contracts を使用すると、ccrewrite がすべてのランタイム依存関係にアクセスする必要があるのはなぜですか?

コード コントラクトを使用しようとしていますが、ブロックされている問題が発生しています。コントラクト参照アセンブリをビルドに設定すると、直接参照されるアセンブリによって間接的に参照されるアセンブリにアクセスしようとすると、ccrewrite がエラーになります。これらの間接アセンブリはソリューションの構築には必要ありませんが、なぜコード コントラクトで必要なのか疑問に思っています。また、ビルドの一部としてすべてのランタイム依存関係を提供することなく、この問題を回避する方法はありますか?

0 投票する
1 に答える
957 参照

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 プロジェクトにアップロードしました

誰かがプロジェクトをダウンロードして、コンパイル エラーを再現できるかどうかを確認できますか? ありがとう。

0 投票する
1 に答える
229 参照

.net - CONTRACT_FULL が定義されていますが、定義がどこにも見つかりません

現在、.NET フレームワークのコード コントラクトを調べています。私がやりたいのは、同僚が Visual Studio に必要な拡張機能をインストールしてそのまま作業を続けることを強制されることを避けながら、これらのコントラクトを使用することです。

コントラクトを使用していくつかのメソッドをセットアップし、実行されたアプリケーションから、CONTRACT_FULLシンボルは定義されているがリライターが呼び出されていないというメッセージを受け取ります。プロジェクト全体を確認しましたが、このシンボルはどこにも定義されていません。この定義はどこから来て、どうすればそれを取り除くことができますか?

コントラクト リライターを有効にすると、このエラーは発生しなくなりますが、前述したように、このリライターをインストールする必要はありません。

0 投票する
1 に答える
1963 参照

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 を維持することを主張するには、常に存在する境界チェックが必要です。