質問

誰でもできるので 説明 以下の的に振る舞えるのでしょうか?

要約作成した場合は、複数の CLS対応 図書館目のVisual Studio2008用テーブルとして共通の名前空間のルートは、図書館を参照別館 必要と 参照する図書館の参考にもなり消費します。

すっかり説明しにくい一文が、ここでの手順を再現する行動には細心の注意を払の名前空間):

作成図書館というLibraryA、単一のクラスには、図書館の

namespace Ploeh
{
    public abstract class Class1InLibraryA
    {
    }
}

の図書館はCLS対応を追加 [assembly: CLSCompliant(true)] にAssemblyInfo.cs.

を他の図書館というLibraryB参考LibraryA.以下のように追加の授業をLibraryB:

namespace Ploeh.Samples
{
    public class Class1InLibraryB : Class1InLibraryA
    {
    }
}

namespace Ploeh.Samples
{
    public abstract class Class2InLibraryB
    {
    }
}

いLibraryBもCLSに対応しています。

知Class1InLibraryBらの型LibraryAはClass2InLibraryBはできません。

を作成する第三の図書館というLibraryC参考LibraryBなLibraryA).以下のように追加クラス:

namespace Ploeh.Samples.LibraryC
{
    public class Class1InLibraryC : Class2InLibraryB
    {
    }
}

これによってコンパイル。知Class1InLibraryCらのクラスLibraryBる は何にな種類からLibraryA.

もとClass1InLibraryCが定義された名前空間の名前空間階層で定義されLibraryB.

これまでに、LibraryCはないLibraryA、を使用していない種類からLibraryAのソリューション統.

今LibraryC CLS対応しています。突然のソリューションな統は、このエラーメッセージ:

タイプ'Ploeh.Class1InLibraryA'で定義されている組み立てがなされます。いてくれるものでなければなりませへの参照組み立て'Ploeh、バージョン=1.0.0.0文=neutral,PublicKeyToken=null'.

しないように注意してください溶液をコンパイルで再び、以下のいずれかの方法:

  • 削除CLSからコンプライアンスLibraryC
  • 追加の参照LibraryAが必要なので)
  • 変更の名前空間にLibraryCようにすることはできませんLibraryBの名前空間階層などにFnaah.サンプル。LibraryC)
  • 変更の名前空間のClass1InLibraryBするもの ない 使用LibracyC)こにあるのではなくLibraryCの名前空間階層などにPloeh.サンプル。LibraryB)

そうであるとの不思議な相互作用の階層名前空間とCLSコンプライア

この問題の解決ができる狩りの一つのオプションのリスト上で誰でもできるので説明を その理由 ところでしょうか?

役に立ちましたか?

解決

私はCLSの公式文書に見ていた(ます。http:// msdn.microsoft.com/en-us/netframework/aa569283.aspx の)が、私は単純な答えを見つけることができる前に、私の頭が爆発します。

しかし、私は基礎がコンパイラは、LibraryCのCLS準拠を検証するために、LibraryAで可能な名前の競合を検討する必要があることだと思います。

コンパイラは(CLSルール1)全ての「定義アセンブリの外部アクセスまたは表示されているタイプの部品を」確認する必要があります。

パブリッククラスがClass1InLibraryCがClass2InLibraryBを継承しているので、「Ploeh。*」「スコープに」今あるので、

、それは「CLS規則5のために、特に、同様CLS準拠の範囲で導入されたすべての名前をLibraryAに対するCLS準拠を検証しなければならない条種類の異なった独立した」こと。

彼らは明確ななるので、

Class1InLibraryBまたはClass1InLibraryCの名前空間のいずれかを変更するには名前の競合のためのチャンスはもうありませんコンパイラを説得するようです。

あなたは(2)、参照を追加し、コンパイルオプションを選択した場合は、

、あなたは参照が実際に結果のアセンブリメタデータでマークされていないことがわかりますので、これはのみコンパイル/検証、時間依存性です。

他のヒント

ることを覚えておいてCLSが適用される規則に発生するセンブリーをサポートしておりますが同士の相互接続性ます。ある意味で定義さの最小共通のサブセットのルールの型に従う必要確なものとするために、言語やプラットフォームagnostic.CLSの遵守のものだけに適用される項目が可視の外を定義します。

を見ているガイドラインの中核的労働基準に準拠したコードは:

  • の使用は避ける名称として用いられている一般的なキーワードプログラミング言語。
  • はユーザーの枠組みをできる著者名の入れ子です。
  • この実装方法と同一の名前とシグニチャーの異なるインタフェースを独立しています。

のルールを決定するCLS-コンプライアンス:

  • が組み立てな明示的なシステム。CLSCompliantAttributeほかの例外をラップしている可能 想定めます。CLSCompliantAttribute(false)です。
  • デフォルトでは、型を継承しCLSの遵守属性の封入タイプ(入れ子の種類)または取得のレベルの遵守を取り付け組み立て(トップレベル)が必要です。
  • デフォルトでは、他のメンバー(法の分野、プロパティ、イベントを受け継ぐCLSの遵守のタイプです。

このコンパイラに関(CLS原則1)できなければならない申請は、規則CLSの遵守の他の情報と輸出されることになる外部の組み立てるタイプを中核的労働基準に準拠した場合はすべて公的にアクセス可能な部品(クラス、インターフェイス、手法、分野、プロパティ、イベントまでご利用いただけるコード実行中の他の組立まで)のいずれか

  • て署名のみで構成する中核的労働基準に準拠したものや
  • 具体的に示していないCLSに対応しています。

よCTS規範囲でグループ/コレクションの名称および範囲内で名前を参照して複数の主体のものと異なる種類の方法、フィールド、入れ子の種類、プロパティ、イベント)または異なるフェースの通称です。命名した者は、その名のと正確に一範囲いを識別するためにそのエントリの両方の範囲および名前を適用しなければなりません。の範囲に認するためのものでした。

以来、タイプは名前の種類別セグメントの名称を記載することもに大分スコープ.完全に特定の型のタイプ名が認定されます。種名scopedの組み立ての実装があるパターンを示すことが分かった。

のためのスコープであるCLSの遵守し、すべての名前を必ず明した場合を除き、名前と同一で解決を通過負荷.にotherwords、CTSできるシングルタイプの使用に同じ名前のフィールドおよび方法、CLSない(CLSルール5).

これを一歩進め、CLSに準拠したタイプなどの実施に非中核的労働基準に準拠したタイプ(CLSル20)のものを受け継ぐらCLS-苦情のタイプ(CLSル23).

組立て頼りになるその他のアセンブリの場合は実装の範囲の組み立て参考資源scopedまたは所有する他組織します。

  • すべての参照はその他のアセンブリを解決の管理下に現在の組み立てます。
  • いつでも地域を特定することはできる組み立て対象範囲の特定の実装が走ります。すべての要求から発信する組み立て範囲を解決の対比でみれる。

すべての最終的な手段であることを検証するために-CLSの遵守のタイプのコンパイルで確認することができること すべての 公共部品のタイプのもCLSに対応しています。ることを確保するためにその名は独自の範囲内で、これに依存しない非中核的労働基準に準拠した種類の部品は、独自の実装とその継承しその定義は、以下のウェブサイトは、CLSに対応しています。を解決するための唯一の方法することができるようになりますのでより検討すべてのアセンブリのタイプの参照です。

このステップVisual StudioであるGUIでラッパの実行MSBuild、最終的にはあくまでも脚本方のC#コマンドラインにコンパイラです。するためのコンパイラの検証CLSの遵守のタイプではないことができるすべてのアセンブリタイプを参照してしまわないプロジェクト)。それを通じてMSBuild、最終的にはVisual Studioを解決するための唯一の方法Visual Studio(MSBuild)のお知らせでのセンブリーはじめとして参照です。

明らからコンパイラでの図では"不足"参考文献を検証するためにCLSの遵守およびコンパイルに成功すれば良いになりますので注意してくださいけっていないにも参考に自動的に当社が代行します。問題は決定 バージョンの組立を含む 場所 組立は、ファイルシステム。強制的に開発者に提供する情報、コンパイラを保証されているが、正しい情報です。この効果を確実にするためのすべての依存のアセンブリにコピーされ Debug/bin または Release/bin フォルダの中に構築では、正しいディレクトリケーション実行時に後取りまとめを行いました。

問題は、Visual Studio 14
で利用可能ですロスリン、中に固定されています 2014年7月の時点で、現在のCTPはこちらですを。
このバグレポートを参照してください詳細ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top