2014-02-20 190 views
0

存在我在Visual Studio 2012的Silverlight 5的項目,我已經在Web項目中定義的以下兩個枚舉:超過命名空間中一個枚舉:類型或命名空間「性別」沒有命名空間

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace myProject.Web.MyEnums 
{ 
    public enum AccountStatus 
    { 
     Active, 
     Suspended, 
     Inactive, 
     Closed 
    } 

    public enum Gender 
    { 
     Male, 
     Female 
    } 
} 

我現在試圖在我的Silverlight項目中的一個視圖中使用這些枚舉。在我的一個方法中,我試圖使用這些函數。相關部分如下:

myObject.AccountStatus = myProject.Web.MyEnums.AccountStatus.Active; 
myObject.Gender = myProject.Web.MyEnums.Gender.Male; 

第一行工作正常。第二行給出錯誤「名稱空間myProject.Web.MyEnums中不存在類型或名稱空間名」性別「......」我嘗試清理項目並重建,但錯誤仍然相同。它無視所有的邏輯,因爲「狀態」和「性別」枚舉都被聲明 - 但一個是有效的,另一個不是。我也嘗試在不同的文件中聲明這兩個枚舉,但這也不起作用。這真的很奇怪 - 可能是一個Visual Studio 2012錯誤?任何想法如何解決這個問題?

+0

哪個項目首先被編譯?您是否在silverlight項目中使用了最新版本的Web項目引用? – Jite

+0

嗯,我已經測試了它,在那裏我註釋了兩行代碼,我在其中使用Enums,以便兩個項目都成功並完全重新編譯。然後我逐個取消註釋。當我取消註釋第一行時,一切都很好。當我取消註釋第二行時,Visual Studio用給定的錯誤將其強調爲紅色。所以是的,即使在使用最新版本的Web項目時也會發生。我見過的最奇怪的錯誤之一。 – Stanley

+0

如果用'};'而不是'}'結束枚舉會發生什麼?同樣的問題? – Jite

回答

0

我巧合地偶然發現了爲什麼一個枚舉存在於命名空間而另一個枚舉不存在。

它看起來像在Web項目中聲明的枚舉不會自動在Silverlight項目中提供。只有在Web項目中的某處使用枚舉時,它纔會真正包含在名稱空間中,因此可以在Silverlight項目中使用。我不確定這是否符合設計要求,或者實際上是Silverlight中的錯誤。

我在使用「AccountStatus」枚舉作爲Web項目內部某個變量的變量,而我沒有使用「Gender」枚舉。這就是爲什麼一個可用而另一個不可用。

我做了什麼來解決這個問題,只是在我的DomainContext類的函數之一中聲明瞭一個類型爲「Gender」的變量,即使我對它做了什麼也不只是聲明它(我不認爲它必須在DomainContext類中 - 我期望只要您在Web項目的任何類中聲明瞭這樣的變量,它就會工作。)

(僅供參考,我聲明的方式是定義一個函數簡單地預計「性別」作爲一個變量):

public void DoNothingWithGender(Gender myGender) { /* Do nothing */ } 

當我宣佈這一點,性別枚舉在我Silverlig可用ht項目。如果我不在Web Project中聲明這樣的變量,則不會將該枚舉提供給Silverlight項目。奇怪的行爲的確如此,但這是解決我的問題的方法。

0

我可以驗證你的代碼在VS 2012上正常工作。還有其他許多事情你應該驗證。

  • 確保解決方案中的所有相關項目都設置爲生成。
  • 確保如果基礎項目包含某些引用(如System.Web.Extensions),則相關項目也必須包含相同的引用。

上面的第二點導致了一些非常模棱兩可的錯誤,沒有明確指出錯誤的位置。

相關問題