c# - 为什么我有时需要添加 Nuget 依赖项,即使我的项目没有直接使用它们?

标签 c# visual-studio nuget .net-4.0

抱歉,标题含糊不清,但我真的不知道如何简洁地表达它。

这是我的问题:我有一个 .NET Framework C# 解决方案,其中有 2 个项目:

  • Project A,一个引用 Nuget 包NP的 C# 库
  • Project B,一个 C# 应用程序,其中包含 Project A 作为项目引用

项目A中,我有一个这样的方法:

public class FooClass {
    public static void Foo(){
        //does something with a class from referenced Nuget package "NP"
        NP.BarClass.Bar();
        return;
    }
}

项目B中,我调用上述方法,如下所示:

public static void main(){
    FooClass.Foo();
}

但是,这会产生以下编译器错误:

The type 'BarClass' is defined in an assembly that is not referenced. You must add a reference to assembly 'NP, Version=X.X.X.X, Culture=neutral, PublicKeyToken=xxxxxxxxxxx'

根据编译器的建议,解决方案是还在项目 B 中添加对 Nuget 包 NP 的引用。当我这样做时,一切都会按预期进行。

我的问题是:

  • 为什么只有某些 Nuget 软件包才会出现这种情况?我去过 使用 C# 已有一段时间了,但并非所有情况都会发生这种情况 包,只有其中一些。例如,这次发生了 带包装 Microsoft.ReportingServices.ReportViewerControl.Winforms,但我也看到其他 nuget 包也发生这种情况。但是,对于其他软件包,这种情况根本不会发生。例如,我在同一个项目中使用了包ClosedXML,它不会给我带来这个问题。为什么?
  • 为什么会发生这种情况?由于我的项目(Project B)不是 直接引用 NP 包中的任何类型或方法,为什么我 必须明确包含它吗?这还不够吗 包含在使用它的项目 A 中吗?

编辑:我已经成功地在一个独立的示例中重现了该问题,请参阅 here

最佳答案

Why does this happen only with certain Nuget packages? I've been working with C# for a while now, and this doesn't happen with all packages, only some of them.

由于您的问题很复杂,我们无法在我们这边测试整个问题,也许您可​​以按照以下步骤操作:

实际上,您的VS Framework版本包引用格式特定的nuget包之间确实存在冲突的可能性

类库项目中安装了一些特定的nuget包,但是当其他项目引用该类库时,某些特定包的内容会与VS旧框架版本冲突,所以还是需要引用main 项目只有添加这个依赖才能被识别。这只是一些特殊包和框架版本的问题。

还有一个就像zivkan所说,你应该保持包管理格式一致( Tools --> Options --> Nuget Package Manager --> General --> Package Management ),防止因管理格式不同而产生冲突。您应该确保项目 A 的输出文件(包括 NP)位于项目 B 的输出文件中。

Why does this happen at all? Since my project (Project B) is not directly referencing any types or methods from package NP, why do I have to include it explicitly? Isn't it enough that it's included in Project A, the one that uses it?

我假设您使用旧的 VS 版本( <=VS2017 )来创建此类项目。

一般来说,您确实不需要将这些包含在主项目(项目 B)中。

事实上,在VS2017或者更早中,以项目引用的形式,确实有一个类库项目中的依赖 nuget 及其文件将在引用它的项目中丢失的问题。 幸运的是,这个问题在vs2019中已经得到修复。

所以如果你的情况是我所说的,我建议你可以使用the latest VS2019 .

或者在较旧的 VS 版本中,使用您的解决方案 --> 在项目 B 中添加 nuget。

在我使用 VS2019 时,我没有遇到同样的错误。

关于c# - 为什么我有时需要添加 Nuget 依赖项,即使我的项目没有直接使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62025471/

相关文章:

c# - 无法加载文件C#

c# - 如何将类作为方法的参数传递?

c# - 文本索引算法

c++ - Windows 中的 strptime?

visual-studio - Windows 10 (UWP) 编码 UI

android - AAPT : Attribute "layout_anchorGravity" already defined with incompatible format. AND 25.0.3\aapt.exe'' 以非零退出值 1 完成

c# - 添加了在 visual studio 中未检测到的引用

c# - 如何将第三方 nuget 包(依赖项)全局部署到 .NET Core 中的服务器?

java - 为什么不能创建没有花括号的 1 语句函数?

asp.net-core - 无法升级或降级 NuGet 包