C#对命名空间

时间:2017-10-06 18:06:16

标签: c#

好的,这让我发疯了。我有一个几乎完成的项目(完美地工作),我想以同样的方式制作另一个。问题是有两层DataAccessLayer和BusinessLogicLayer的解决方案。这两个图层都有一个模型库,其中包含项目中的所有模型。我需要将模型从第一层转换为管理器库中第二层的模型。这适用于我收到的完成的项目,但我无法设法在我的项目上。 问题是,我不能像完成项目那样对工作进行必要的引用。结构是:

BusinessLogicLayer

- 经理

----用户

- 模型

----用户

DataAccessLayer

- 模型

----用户

在Managers项目中,我有一个添加到DataAccessLayer.Models的引用。 在Users类中我得到了:

using Library.BusinessLogicLayer.Models;

现在在我的项目中,这一行是红色下划线:

  

错误CS0234类型或命名空间名称'模型'不存在于   命名空间' Library.BusinessLogicLayer' (你错过了一个集会吗?   引用?)

我甚至不确定这个原始项目的工作方式和原因。但我无法弄清楚它在我的项目上是否正常工作,结构完全相同。有人对此有所了解吗?

编辑: Dunno为什么我之前没有上传这个。这是结构。 https://i.imgur.com/srnySFJ.jpg

EDIT2: 由于它不太容易理解,我在github上传了整个项目,所以你可以仔细看看它。 https://github.com/Morsusy2k/Library

这就是问题所在: https://i.imgur.com/DvCvnMA.jpg

2 个答案:

答案 0 :(得分:2)

根据您的描述和我的理解,似乎经理模型是两个不同的项目。如果是这种情况,请确保在BusinessLogicLayer.Models中添加对BusinessLogicLayer.Managers的引用。

另一方面,如果您只有两个项目 BusinessLogicLayer DataAccessLayer ,那么很可能意味着Library.BusinessLogicLayer.Models不是命名空间。

更新

根据您添加的图片,您可能需要添加对Library.BusinessLogicLayer.Models.Models的引用。您有一个名为模型的文件夹和一个名为模型的项目。 Visual Studio根据解决方案名称,解决方案文件夹,项目名称,项目中的文件夹自动生成名称空间。

您的代码存在三个问题。第一个是您应该将Library.DataAccessLayer.Models的引用添加到Library.BusinessLogicLayer.Models。这是因为您在 BusinessLogicLayer.Models 中的 DataAccessLayer.Models User中有User2

另外两个问题是使用Map方法向构造函数发送错误数量的参数(您缺少UserId),其他问题是您的DateOfBirth和{{1}在同一个方法中处于错误的顺序。

DateJoined

此外,关于您提供的最后一个屏幕截图,您没有using System; using System.Collections.Generic; using System.Linq; using global::Library.BusinessLogicLayer.Models; using Library.BusinessLogicLayer.Managers.Properties; using Library.DataAccessLayer.Models; // <-- Add reference to this namespace Library.BusinessLogicLayer.Managers { public class Users2 { public IEnumerable<User> GetAll() { using(DataAccessLayer.DBAccess.Library library = new DataAccessLayer.DBAccess.Library(Settings.Default.LibraryDbConnection)) { return library.Users.GetAll().Select(user => Map(user)); } } private User Map(DataAccessLayer.Models.User dbUser) { if (dbUser == null) return null; // TODO: Constructor is missing a paremeter. I'll add a temporary one int tempUserId = 0; User user = new User(tempUserId, dbUser.Name, dbUser.UserName, dbUser.Password, dbUser.Email, dbUser.DateJoined, dbUser.DateOfBirth) // <-- The last two params are in the wrong order { Id = dbUser.Id }; return user; } private Library.DataAccessLayer.Models.User Map(User2 user) { if (user == null) throw new ArgumentNullException("user","Valid user is mandatory!"); return new DataAccessLayer.Models.User(user.Id,user.Name, user.UserName, user.Password, user.Email, user.DateJoined, user.DateOfBirth); } } } 命名空间。删除2号以使其工作。

由于我无权使用固定代码更新您的仓库,因此您必须根据我的回答手动修复它。否则,让我知道,以便我们看到如何推回代码。

答案 1 :(得分:0)

您可以尝试一些事项:

  1. 此错误可能会出现在BusinessLogicLayer中,因为DataAccessLayer无法构建。尝试单独构建DataAccessLayer以查看是否出现了其他错误。
  2. 引用可能是“已添加”,但由于某种原因,您可能无法引用正确的DLL或版本。 Check your .csproj files manually以确保所有引用和版本都正确,具有正确的提示路径等。如果您有任何配置文件,您还应该检查它们以确保没有版本冲突。
  3. 除了检查参考文献外,还可以添加if-then and switch case logic inside of the .csproj files。这是Visual Studio不支持的MSBuild功能,因此您可能需要在当前.csproj文件中手动复制/更新此逻辑(如果存在)。
  4. 检查项目属性中的默认命名空间,看它们是否与旧项目相同。如果您在迁移到此项目后添加了新文件,则可能无意中添加了错误的命名空间,并且该命名空间可能会导致冲突。您还可以尝试using global::Library.BusinessLogicLayer.Models;查看是否修复了错误消息,或者至少在Intellisense正在选择命名空间时。
  5. 如果这不起作用,请检查所有.cs个文件中的所有命名空间,看看是否有任何已经流氓的名称空间。
  6. 由于您的Models命名空间存在问题,并且您有两个具有相同名称的命名空间,请尝试暂时将其中一个(是的,其中一个项目中的每个.cs文件)重命名为{{ 1}}看看它是否提供线索(例如错误消失或改变)。