抱歉,标题含糊不清,但我真的不知道如何简洁地表达它。
这是我的问题:我有一个 .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/