【问题标题】:How to reference NuGet packages?如何引用 NuGet 包?
【发布时间】:2020-02-03 01:36:54
【问题描述】:

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

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

  • DataAccess - 包含访问数据的逻辑、DTO与实体的映射等,
  • DataAccessTest - 包含 DataAccess 项目的单元测试,
  • Service - 将 DataAccess 项目包装到 Windows 服务中。

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

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

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

【问题讨论】:

  • 确切的错误是什么
  • 我认为答案是“是”。要构建您的项目,所有引用都需要在构建时有效。如果您使用 Tools => NuGet Package Manager => Manage NuGet Packages for Solution 并添加包,它们最终会出现在您的 csproj 文件中...

标签: c# .net package nuget rider


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      相关资源
      最近更新 更多