web-dev-qa-db-ja.com

Resource.Designer.csからのあいまいな参照インテリセンスエラー

私はVisual Studio 2017で開発しているときに、しばらく無視することができたが、実際にはbug私になり始めている特有のバグに遭遇しています。

この問題は、errorではなくbugと呼んでいます。 Visual Studioでプロジェクトをビルドし、ビルド出力からのエラーや警告なしに開発デバイスに展開できます。これは少し無視しても問題ないように思えるかもしれませんが、私のインテリセンスがエラーとして赤で下線を引いているため、時間が経つと問題になります

a

Resourceクラスから属性を参照するたびに。ご想像のとおり、このクラスを頻繁に参照すると、Visual Studioエディターは最終的にこれらの「エラー」で混乱し、(a)コード内の実際のエラーを見つける能力を妨げ、(b)あらゆる理由で私を苛立たせます...

「エラー」調査

  • 最後の画像に示すように、インテリセンスは "Ambiguous Reference"Resourceクラス。 Resource.Designer.csファイルを確認すると、1つの参照しか表示されませんが、2番目のエラーが発生します

b

  • 「同じ名前のメンバーは既に宣言されている」と教えてくれます。これにより、2番目のResource.Designer.csファイルがあると信じるようになりましたが、ソリューションエクスプローラーとWindowsエクスプローラーの両方に1つしか表示されません。

c

試みられた解決策

  • 名前空間をInventoryApp(ファイルのデフォルト名前空間)からInventoryApp.Resourcesに変更しました。これは恐ろしいエラーを取り除きましたが、プロジェクトをビルドすると、ファイル内のネームスペースをデフォルトに戻し、エラーがポップアップ表示されます。また、これは大きなノーだと知っている人からも言われました。
  • Resource.Designer.csファイルを削除し、プロジェクトから「obj」および「bin」フォルダーを削除し、ソリューションをクリーンアップおよび再構築してから、新しいResource.Designer.csファイルをソリューションに戻します。これは問題を解決するために何もしませんでした。
  • 完全に新しいプロジェクトをゼロから作成しました。空白のAndroidアプリをVisual Studioテンプレートから作成した後でも、エラーは続きます。これは質問を請います:これはXamarin.Androidのインストールの問題ですか?

サイドノート

  • Resource.Designer.csファイルのビルドアクションが「コンパイル」に設定されている
  • 。csproj構成ファイルには次のタグが含まれます。

    <AndroidResgenFile>Resources\Resource.Designer.cs</AndroidResgenFile>
    <AndroidResgenClass>Resource</AndroidResgenClass>
    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
    <AndroidUseLatestPlatformSdk>false</AndroidUseLatestPlatformSdk>
    <TargetFrameworkVersion>v7.1</TargetFrameworkVersion>
    <AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
    <MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
    <MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
    
18
dingFAching

6/6/2018アップデート

ReSharperをお持ちの場合は、以下で説明するプロジェクトごとのソリューションを無視して、代わりに最新バージョン(現在のReSharper 2018.1.2)をインストールするだけです。どうやら、根本的な問題は以前のバージョンのバグが原因でした。アップグレードで問題は解決しました。

詳細については、 youtrack.jetbrains.com/issue/RSRP-469636 をご覧ください。

この情報については、Xamarinフォーラムの@davidbauduinに感謝します。


根本的な問題を理解し、実行可能な解決策を持っていると思います。

ソリューション

.csprojファイルの<PropertyGroup>セクションに次を追加します。

<AndroidUseManagedDesignTimeResourceGenerator>False</AndroidUseManagedDesignTimeResourceGenerator>

理由

Visual Studioの以前のバージョンでは、この機能がデフォルトでオフになっていましたが、最新のVS2017アップデート(15.7.3)ではオンになっています。この機能は、あいまいな参照の問題を引き起こす2番目のResources.Designer.csファイルを生成します。

Intellisenseエラーのあるリソース定数にカーソルを合わせ、右クリックして[定義に移動]を選択し、最初の項目を選択すると、Resource.Designer.csファイルに移動して確認できます。繰り返しますが、2番目のものを選択すると、別のResource.Designer.csファイルに移動します。これらの1つは、obj\Debug\designtime\Resource.Designer.csファイルを指します。上記のようにその機能をFalseに設定すると、obj\Debug\designtimeパスにあるResource.Designer.csファイルは生成されません。

AndroidUseManagedDesignTimeResourceGenerator機能に関する情報:

https://developer.xamarin.com/releases/Android/xamarin.Android_8/xamarin.Android_8.1/#design-time-builds-managed-resource-parser

https://github.com/dotnet/project-system/blob/master/docs/design-time-builds.md#design-time-builds

お役に立てれば!

35
Robert Bruce