超过命名空间中一个枚举:类型或命名空间“性别”没有命名空间
存在我在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错误?任何想法如何解决这个问题?
我巧合地偶然发现了为什么一个枚举存在于命名空间而另一个枚举不存在。
它看起来像在Web项目中声明的枚举不会自动在Silverlight项目中提供。只有在Web项目中的某处使用枚举时,它才会真正包含在名称空间中,因此可以在Silverlight项目中使用。我不确定这是否符合设计要求,或者实际上是Silverlight中的错误。
我在使用“AccountStatus”枚举作为Web项目内部某个变量的变量,而我没有使用“Gender”枚举。这就是为什么一个可用而另一个不可用。
我做了什么来解决这个问题,只是在我的DomainContext类的函数之一中声明了一个类型为“Gender”的变量,即使我对它做了什么也不只是声明它(我不认为它必须在DomainContext类中 - 我期望只要您在Web项目的任何类中声明了这样的变量,它就会工作。)
(仅供参考,我声明的方式是定义一个函数简单地预计“性别”作为一个变量):
public void DoNothingWithGender(Gender myGender) { /* Do nothing */ }
当我宣布这一点,性别枚举在我Silverlig可用ht项目。如果我不在Web Project中声明这样的变量,则不会将该枚举提供给Silverlight项目。奇怪的行为的确如此,但这是解决我的问题的方法。
我可以验证你的代码在VS 2012上正常工作。还有其他许多事情你应该验证。
- 确保解决方案中的所有相关项目都设置为生成。
- 确保如果基础项目包含某些引用(如System.Web.Extensions),则相关项目也必须包含相同的引用。
上面的第二点导致了一些非常模棱两可的错误,没有明确指出错误的位置。
哪个项目首先被编译?您是否在silverlight项目中使用了最新版本的Web项目引用? – Jite
嗯,我已经测试了它,在那里我注释了两行代码,我在其中使用Enums,以便两个项目都成功并完全重新编译。然后我逐个取消注释。当我取消注释第一行时,一切都很好。当我取消注释第二行时,Visual Studio用给定的错误将其强调为红色。所以是的,即使在使用最新版本的Web项目时也会发生。我见过的最奇怪的错误之一。 – Stanley
如果用'};'而不是'}'结束枚举会发生什么?同样的问题? – Jite