Onu*_*ğlu 5 c# vb.net dependencies reference
考虑我们有3层应用程序,并有三个项目名为P1,P2,P3.
依赖关系:P1(数据)<< P2(业务逻辑)<< P3(演示)
P2有一个基类X,它在P2 中的另一个类Y中继承.因此,我们将ref P1添加到P2.但是,P3使用P2.Y并且不使用P1.X直接.
为此,我们必须将ref P2添加到P3.但VB和C#之间存在差异.
在VB中,我们仅将ref P2添加到P3.P2使用P1,但对P3无关紧要.我们不需要将ref P1添加到P3.这就够了!
但是,在C#中,我们必须将ref P1和P2都添加到P3,即使P3不使用P1.X也是如此.如果您没有将ref A添加到C,则会收到以下错误:
类型'P1.X'在未引用的程序集中定义.您必须添加对程序集'P1,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'的引用.
为什么我们必须在C#中添加两个项目?
或者,我们可以阻止这种行为吗?
一个可能的原因是 P2 公开公开了 P1 中定义的类型的成员。在这种情况下,P1 也必须在 P3 中引用,即使您没有在 P3 中显式使用它。
例子:
// Assembly P1
public class C1
{
...
}
// Assembly P2
public class C2
{
public string Foo { get; set; }
public C1 Bar { get; set; }
}
// Assembly P3
void Main()
{
C2 c = ...
Console.WriteLine(c.Foo);
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,P3 使用 C2(在 P2 中定义),并且 C2 公开类型 C1 的成员(在 P1 中定义),因此 P3 必须引用 P1 (即使它不使用 C2.Bar)。
编辑:实际上我错了:只有在引用时才必须引用 P1 C2.Bar...VB 中的行为与 C# 中的行为完全相同,我只是尝试过(如果不添加对 P1 的引用,则会出现此错误) 。如果您以前在 VB 项目中没有此约束,那只是因为 P3 没有使用任何依赖于 P1 的东西。