好的,这让我发疯了。我有一个几乎完成的项目(完美地工作),我想以同样的方式制作另一个。问题是有两层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
答案 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)
您可以尝试一些事项:
BusinessLogicLayer
中,因为DataAccessLayer
无法构建。尝试单独构建DataAccessLayer
以查看是否出现了其他错误。.csproj
files manually以确保所有引用和版本都正确,具有正确的提示路径等。如果您有任何配置文件,您还应该检查它们以确保没有版本冲突。.csproj
files。这是Visual Studio不支持的MSBuild功能,因此您可能需要在当前.csproj
文件中手动复制/更新此逻辑(如果存在)。 using global::Library.BusinessLogicLayer.Models;
查看是否修复了错误消息,或者至少在Intellisense正在选择命名空间时。.cs
个文件中的所有命名空间,看看是否有任何已经流氓的名称空间。Models
命名空间存在问题,并且您有两个具有相同名称的命名空间,请尝试暂时将其中一个(是的,其中一个项目中的每个.cs
文件)重命名为{{ 1}}看看它是否提供线索(例如错误消失或改变)。