問題タブ [code-contracts]

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 投票する
3 に答える
1902 参照

msbuild - MsBuildにコードコントラクトを使用した静的コントラクト分析を実行させない方法はありますか?

私のプロジェクトでは、静的チェックが無効になっていますが、それでも、cmdを指定してmsbuild.exeを実行すると、プロジェクトごとに静的チェックが開始されます...パラメーターを使用してこれを無効にする方法はありますか?

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

c# - この単純な契約を間違って実装していますか?

これは私のコードです:

私はContract.RequiresメソッドとContract.Invariantメソッドの両方を試して、vertexCount変数が2以下になるのを防ぎました。ただし、2辺以下のRegularPolygonを初期化することはできます。私の(簡略化された)NUnitテストは次のようになります。

上記のテストにも合格し、理由がわかりません。

最初は、ReSharperが何かを台無しにしていたのではないかと思いました。Contract名前空間でメソッドを使用しようとすると、行がグレー表示され、このメッセージが表示されるためです。

メソッドの呼び出しはスキップされます。メソッドが条件付きであるか、実装されていない部分的なメソッドであるため、コンパイラはメソッド呼び出しを生成しません。

ただし、R#を一時停止してNUnitでテストを実行しても同じ結果になり、VSでもエラーや警告は発生しません。つまり、ReSharperにはまだコードコントラクトの強調表示の互換性がないからだと思います。

私はドキュメントを見てきましたが、私が知る限り、この問題は発生してはいけません。

コードコントラクトを誤って使用していますか、それとも環境によってコードコントラクトが機能しなくなっていますか?

ありがとうございました。

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

c# - インターフェイスタイプのコードコントラクトクラスの命名規則

名前空間のCodeContractsクラスを使用しSystem.Diagnostics.Contractsてオブジェクトのコントラクトを定義していますが、コントラクトがベースインターフェイスに対して定義されている場合、他の人がコントラクトクラスにどのように名前を付けるのか疑問に思っています。小さな例で説明しましょう:

この例では、Contract Class AnimalContractと呼んでいますが、もっと良い名前はありますか?コントラクトはインターフェイスに対して定義されているため、クラスIAnimalContractに名前を付けて、IAnimalインターフェイスのコントラクトであることを示したいと思います。このように、ソリューションエクスプローラーで2つのアイテムを見ると、それらは視覚的に「タイアップ」されており、頭の中で物事をきれいに保つのに役立ちます。もちろん、コントラクト自体はインターフェースではないので、そのような名前を付けるのは私には悪臭がします。

このような場合、皆さん(およびギャル)はどのようにコントラクトクラスに名前を付けますか?一般的に受け入れられている規則はありますか?

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

visual-studio-2008 - コードコントラクトはVisualStudio2008の速度を低下させます

Visual Studio 2008(C#)でコードコントラクトを使い始めてから、dllのビルドが非常に遅くなります。静的チェックをオンにしていませんが、どうやら書き換えには永遠に時間がかかります...

これを解決する方法はありますか?これは、Microsoftコードコントラクトの将来のバージョンで改善されますか?

更新:VS2008でビルドする場合、アセンブリのプロパティで静的分析がオフになっている場合でも、各dllに対して静的分析が実行されます...

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

code-contracts - すべての派生クラスで基本クラスのプロパティが不変であることを証明する必要がありますか?

Null Objectパターンを使用して、後の段階でIoCセッターインジェクションによって変更できるデフォルトのロガー実装を提供しようとしている基本クラスがあります。

コードで示しているように、私の問題は、派生クラスのコンストラクターの最後に、基本クラスから不変の「Logger!= null」オブジェクトが証明されていないという警告が表示されることですが、何も変更されていないことは明らかです。 Loggerプロパティ値と私は、セッターの周りにも契約を結んでおり、とにかくnullにならないようにしています。

すべての派生クラスでこの事実を反証する必要を回避する方法はありますか、それともこれは静的アナライザーの単なる制限ですか?

更新:CodeContractsの最新バージョンで問題が修正されました。また、抽象基本クラスコンストラクターのassertはもう必要ありません( "Contract.Assert(Logger!= null);"という行)

0 投票する
4 に答える
615 参照

c# - CodeContracts - 誤検知

既存の中規模プロジェクトで .NET 4 の CodeContracts の実験を始めたところですが、静的チェッカーが次のコードについてコンパイル時に警告を発していることに驚いています。

CodeContracts 静的チェッカーが strs.Add(...) 行について不平を言うのはなぜですか? strs が null になる方法はありませんよね?私は何か間違ったことをしていますか?

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

visual-studio-2010 - system.diagnostics.contracts.contract は v4.0 v3.5 の両方に存在します

Visual Studio 2010 にアップグレードし、コード コントラクト msi をインストールしました。使用しようとすると、system.diagnostics.contracts.contract dll が v3.5 と v4 フレームワークの両方に存在するというコンパイラ エラーが発生します。これを解決するために私が何をすべきか知っている人はいますか? ありがとう。

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

c# - C#コードコントラクト:なぜこの単純な条件を証明できないのですか?

コードコントラクトの簡単なテストを行っています。次のコードはWinFormです。これは(もちろん)合格です:

ただし、非常に単純なレベルの間接参照を追加すると、「証明されていないものが必要」と表示されます。

これを証明するのは簡単なことのようです。なぜ機能しないのですか?

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

c# - これは Code Contracts リライタのバグですか?

.NET コード コントラクトを試しています。次のコードは、ランタイム コントラクト チェックがオフの場合は問題なく実行されますが、ランタイム コントラクト チェックがオンの場合は失敗します。

このコードを実行したときに発生するエラーは、契約違反ではありません。むしろ、リライターが何らかの形で破損したバイナリを生成しているように見えます。

未処理の例外: System.BadImageFormatException: 不正な形式のプログラムを読み込もうとしました。(HRESULT からの例外: 0x8007000B) ConsoleApplication1.Program.Main (String [] args) で

次の行を削除すると、エラーはなくなります。

何か間違ったことをしているのですか、それともバイナリ リライタのバグですか? 私はそれについて何ができますか?

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