如何引用 NuGet 包?

How to reference NuGet packages?

我是 .NET 世界的新手,此时我对包、引用以及如何在我的 c# 项目中引用它们感到非常困惑。

我的解决方案中有 3 个项目:

现在,DataAccess 项目引用 AutoMapper(以及其他)来帮助进行数据转换。它包含在 csproj 文件的 <PackageReference /> 元素中。当我执行 dotnet restore 时它似乎工作正常,但是 dotnet build 在尝试解析命名空间时失败了! JetBrains Rider 也是如此——直到我在 <Reference>!

中明确引用它们,它才会找到命名空间

不确定是否相关,但从属项目也是如此。例如,DataAccessTest 引用 DataAccess 项目 - 因此测试将 运行。但是,它仍然需要在项目引用之上添加传递依赖项(例如 AutoMapper)。

这是预期的行为吗?您是否需要同时保留 <PackageReference><Reference> 才能使项目正确编译?

在 C# 中,您必须注意对其他项目的引用。如果一个项目已被其他项目引用,则其他项目不能使用或引用第一个项目。如果你这样做了,它会给你编译错误。

您需要为每个引用该包中方法的项目安装 Nuget 包。因此,如果只有您的 DataAccess 项目需要 AutoMapper,那么将 Nuget 包添加到该项目就足够了。该解决方案只不过是一堆项目的包装器。您应该能够单独发布一个项目。该项目将处理其自身的依赖项。很难找出哪里出了问题。如果您创建一个小型测试项目可能会有所帮助,例如创建一个空的控制台项目和一个 DataAccess 库。然后将 Nuget 包添加到您的 DataAccess 库并复制所有内容。通过这种方式,您可以尝试找出问题所在。确保为正确的项目安装 Nuget 包(在我发现它是如何工作之前,我错了好几次)。