簡體   English   中英

Resource.Designer.cs中的模糊引用智能感知錯誤

[英]Ambiguous reference intellisense error from Resource.Designer.cs

我在Visual Studio 2017上開發時遇到了一個奇怪的錯誤,我已經能夠忽略一段時間,但現在開始真的我感到煩惱

我將此問題稱為錯誤而不是錯誤,因為我仍然可以在Visual Studio中構建我的項目並將它們部署到我的開發設備,而不會出現構建輸出中的錯誤或警告。 這似乎可以忽略一點,但隨着時間的推移它已經成為一個問題,因為我的intellisense用紅色強調它作為一個錯誤

一個

每次我引用Resource類的屬性。 正如你可能猜到的那樣,我引用了很多這個類,Visual Studio編輯器最終變得混亂了這些“錯誤”,它們(a)阻礙了我在代碼中發現實際錯誤的能力,並且(b)讓我無法理解......

“錯誤”調查

  • 如上圖所示,intellisense正在為Resource類中的每個屬性選擇一個“不明確的引用” 當我檢查我的Resource.Designer.cs文件時,我只看到一個引用,但得到第二個錯誤

b

  • 它現在告訴我, 已經聲明“具有相同名稱的成員” 這讓我相信有第二個Resource.Designer.cs文件,但我的解決方案資源管理器和Windows資源管理器都只顯示一個。

C

試圖解決方案

  • 將命名空間從InventoryApp (文件的默認命名空間)更改為InventoryApp.Resources 這讓我擺脫了可怕的錯誤,但是在構建項目時,它將文件中的命名空間恢復為默認值,並且錯誤會彈回。 有人告訴我,我知道這是一個很大的禁忌。
  • 刪除了Resource.Designer.cs文件,從項目中刪除了“obj”和“bin”文件夾,清理並重建了解決方案,然后將新的Resource.Designer.cs文件添加回我的解決方案。 這沒有解決問題。
  • 從頭開始創建一個全新的項目。 即使在從Visual Studio模板創建空白Android應用程序后,錯誤仍然存​​在。 這引出了一個問題: 這是我安裝Xamarin.Android的問題嗎?

側面筆記

  • Resource.Designer.cs文件的Build Action設置為“Compile”
  • .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> 

6/6/2018更新

如果你有ReSharper,你很可能會忽略我下面描述的每個項目解決方案,而只需安裝最新版本(目前是ReSharper 2018.1.2)。 顯然,底層問題是由先前版本中的錯誤引起的。 升級為我解決了這個問題。

有關更多信息,請參閱youtrack.jetbrains.com/issue/RSRP-469636

感謝@davidbauduin在Xamarin論壇上獲取此信息。


我相信我已經找到了根本問題,並有一個可行的解決方案。

將以下內容添加到.csproj文件中的<PropertyGroup>部分:

<AndroidUseManagedDesignTimeResourceGenerator>False</AndroidUseManagedDesignTimeResourceGenerator>

原因

雖然以前版本的Visual Studio默認關閉了該功能,但最新的VS2017更新(15.7.3)已打開。 該功能會生成第二個Resources.Designer.cs文件,導致模糊的引用問題。

您可以通過將智能感知錯誤懸停在資源常量上進行驗證,右鍵單擊,選擇“轉到定義”,然后選擇第一個項目,該項目將轉到Resource.Designer.cs文件。 如果您重復,但選擇第二個,您將被帶到另一個Resource.Designer.cs文件。 其中一個指向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

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM