28

[リンクとして追加] オプションを使用して、複数のアセンブリに同じソース ファイルのインスタンスを含めています。特に、これらのアセンブリ内に同じソースのインスタンスを含める必要があります。これは、アセンブリの内部で発生する必要があるライセンスの検証を担当するためです。モジュールの境界を越えてライセンス コールを実行すると、セキュリティ リスクが発生する可能性があります。

コードを含む私のソリューションのプロジェクトの一部は、コードを含む他のモジュールに依存しているため、警告CS0436が発生します。

「[licence.cs フル パス] のタイプ [タイプ] は、[licence.cs を含む依存関係プロジェクト] のインポートされたタイプ [LicenceClass] と競合します。[licence.cs フル パス] で定義されたタイプを使用します。」.

クラス エイリアスを宣言しようとしましたが、licence.cs 内部の定義によって同じ警告が発生します。エイリアスには、同じ警告の原因となる重複したクラス名への参照が必要です。

アセンブリ間でソースを複製するのは悪い習慣であることはわかっていますが、この場合は意図的なものです。警告を回避するために、名前が変更されたクラスを持つ専用インスタンスではなく、各アセンブリがリンクする中央インスタンスを保持したいと思います。

私が持っている回避策は、#pragma. よりエレガントなソリューションはありますか?

4

6 に答える 6

20

このような警告を取得する別の方法は、Visual Studio でプロジェクトを自分自身を参照するように設定するだけであることに注意してください: 参照 -> ソリューション -> など (この宝石をどのように理解したかは、読者への演習として残されています... )

Visual Studio は喜んで準拠しますが、ビルド中に OP によって記述されたタイプの警告の壁をスローするだけです。

于 2016-01-29T14:04:29.500 に答える
16

競合が発生するのは、2 つの依存クラスに同じクラスが含まれている場合のみです。次の 2 つの回避策があります。

  1. CS0436 の原因となるクラスで警告を無効にします。

    #pragma warning disable 0436
    
  2. 各クライアント プロジェクトで一意に名前が付けられた、クラスの個別のインスタンスを用意します (メンテナンスの観点からは望ましくありません)。

編集: 解決策もあります: マークが以下に提案することを行い、重複するクラスをマークしますinternal

于 2013-02-22T17:49:17.890 に答える
2

.NET Core では、project.json で警告を無効にすることもできます。

{
  "buildOptions":
  {
    "nowarn":
    [
      "CS0436"
    ]
  }
}
于 2016-09-03T11:49:53.427 に答える
1

このエラーが発生しましたが、2 つの異なるクラスでは発生しませんでした!
それぞれの新しいクラスはそれ自体と競合するため、明らかにそれがありましたCS0436 Error

苦労した後、それがMirror Asset私のマルチプレイヤー Unity プロジェクトで使用していたものであることがわかりました。ミラーには、私が作成した (および から継承した) すべての新しいクラスが含まれていましたNetworkBehavior

私の外部エディターはVSCode(ビジュアル スタジオ コード、ソリューションはビジュアル スタジオにも適用される可能性があります) でした。

解決


Edit / Preferences / External tools / "Generate .csproj files for:"
さまざまな設定のテストを開始しましたが、これはうまくいきました:(正確
な設定がすべてで機能するかどうかはわかりませんが、プロジェクトに適切なファイルがない場合、このエラーが発生します.私の場合のように.)

Regenerate project filesこれらの設定 (またはプロジェクトに適した設定) を適用した後、Unity と VSCode をクリックして再起動します。

于 2020-08-10T06:53:57.950 に答える