命名空间不被识别(尽pipe它在那里)
我得到这个错误:
无法findtypes或名称空间名称“AutoMapper”(您是否缺lessusing指令或程序集引用?)
有趣的是,我已经在我的项目中有这样的参考:
这是我的代码:
using System.Collections.Generic; using DataContract; using SelectorDAL; using AutoMapper; namespace SpecimenSelect { public class SpecimenSelect : ISpecimenSelect { public SpecimenSelect() { SetupMaps(); } private static void SetupMaps() { Mapper.CreateMap<SpecimenDetail, SpecimenDetailContract>(); }
另一个奇怪的是,我有两个其他项目在我的解决scheme,都使用AutoMapper和引用完全相同的AutoMapper.dll文件。 他们都工作得很好。
这是一个屏幕截图:
这里是代码(编译好):
using System.Collections.Generic; using AutoMapper; using DataContract; using SelectorDAL; namespace PatientSelect { public class PatientSelect : IPatientSelect { public PatientSelect() { SetupMaps(); } private void SetupMaps() { Mapper.CreateMap<Patient, PatientContract>(); Mapper.CreateMap<OrderedTest, OrderedTestsContract>(); Mapper.CreateMap<Gender, GenderContract>(); }
两个引用在属性页面上似乎都有相同的数据。
我错过了什么?
我试过了:
- 重新启动Visual Studio
- 引用没有使用语句(即
AutoMapper.Mapper.CreateMap
) - 清洁和重build
任何其他的想法?
检查以确保您的项目没有设置为使用.NET Framework 4客户端configuration文件。
您可以通过右键单击您的项目(而不是解决scheme)来检查/更改,select属性 – > 应用程序 – > 目标框架 。 目标框架是该页面上的下拉菜单。
这是Visual Studio中的一个问题(我甚至会把它称为一个错误)。 AutoMapper需要从.NET Framework 4客户端configuration文件中排除的程序集。 由于您的项目正在使用该版本的框架,它打破了。
当您引用的项目的.NET Framework版本高于创build引用的项目时,类似的错误将传播到构build过程。 即一个定位4.5的项目会引用同样的错误。
当发生这种情况时,需要有一个更好的错误信息,因为没有合理的解释,为什么它不会build立,因为错误信息告诉你引用你已经明确引用的程序集。
愚蠢的问题:可能有两个automapper.dll的? 一个具有AutoMapper命名空间,另一个没有? 确认两个项目中的path。
到过那里…
也注意到使用的顺序是不同的。 应该不重要,但你试图洗牌吗?
如果你的类没有编译,即使是在项目中检查这些:
- 无论类名是否完全一样
- 名字空间是否完全一样
- 是否类属性显示生成操作=编译
我有一个类似的问题,在VS2010中不被识别的引用,这里的答案不能纠正它。
我的解决scheme中的问题与所引用项目所在path的扩展有关。 在我和SVN合作的时候,我做了一个存储库的一个分支来做一些testing,并且这个分支在path结构中增加了两个层次,所以这个path太长了,不能在windows中使用。 这没有引发任何错误,但没有识别项目引用的名称空间。 当我纠正项目的位置有一个小path一切都很好。
在我的情况下,引用的DLL是build立在更高版本的.Net框架。 添加参考后,我可以使用它。 但是一旦我做了一个构build,就会popup“缺失引用”错误。 我刷新DLL的错误将去,但它永远不会build立。 这篇文章让我检查框架版本,因此我可以通过在相同版本中构build引用的项目来解决它。
项目的types表可能处于不正确的状态。 我会尝试删除/添加引用,如果这不起作用,创build另一个项目,导入我的代码,看看是否可行。
我在使用VS 2005的时候遇到了这个问题,但是现在我们可以期望 MS能够解决这个问题。
这个问题已经被授予,但还有一些尚未描述的细节需要检查。
我也有这样的行为,在项目A中引用了项目B,但项目B中的名称空间在项目A中未被识别。挖了一些后,我发现我的path太长了。 通过减less项目(A和B)的path,参考变得可见和可用。
我通过在更小的path深度创build项目C来testing这个理论。 我在项目A中引用项目C.引用正常工作正常。 然后,我从解决scheme中删除项目C,只是将项目C移到深度path,与项目B相同,并将项目C添加回解决scheme,并尝试编译。 然后我再也看不到项目C对象了。
在我的情况下,我已经复制了一个类库,并没有改变项目属性中的“程序集名称”,所以一个DLL覆盖其他…
我遇到类似的命名空间/方法问题,在执行过程中没有find,虽然在编译过程中没有问题,原因似乎是我引用的程序集已经部署到GAC中,从那时起被更改,所以当我引用程序集在Visual Studion中它使用的是最新版本,但是在运行时使用了GAC的版本。