.net Visual Studio参考项目/Dll';s

.net Visual Studio参考项目/Dll';s,.net,winforms,visual-studio,architecture,reference,.net,Winforms,Visual Studio,Architecture,Reference,如果我在订单中有一个项目列表 1. Commons 2. DAL 3. BAL 4. WebUI 在上面的项目中,引用应该以这种方式进行 DAL refer's to Commons. BAL refer's to DAL. WebUI refer's to BAL. 那么,当我从WebUI访问BAL方法时,它为什么会给出一个错误,该方法返回一个在Commons中定义的对象。在项目依赖中,WebUI依赖于所有三个项目。但是为了简单起见,我不想在WebUI项目中包含Common、BAL、DAL

如果我在订单中有一个项目列表

1. Commons
2. DAL
3. BAL
4. WebUI
在上面的项目中,引用应该以这种方式进行

DAL refer's to Commons.
BAL refer's to DAL.
WebUI refer's to BAL.
那么,当我从WebUI访问BAL方法时,它为什么会给出一个错误,该方法返回一个在Commons中定义的对象。在项目依赖中,WebUI依赖于所有三个项目。但是为了简单起见,我不想在WebUI项目中包含Common、BAL、DAL的引用。但是我想要的是,它应该自动包含所有依赖项目(如果有的话)的引用


有谁能帮我解释一下如何摆脱Visual Studio的这种意外行为。

如果
WebUI
使用了
Commons
中定义的任何类型,那么
Commons
项目必须作为
WebUI
项目的引用包含在内。即使该类型用作在
WebUI
项目正在使用的不同程序集中声明的方法(即
BAL
)的返回类型


确实没有办法解决这个问题。

如果
WebUI
使用
Commons
中定义的任何类型,则必须将
Commons
项目作为
WebUI
项目的参考。即使该类型用作在
WebUI
项目正在使用的不同程序集中声明的方法(即
BAL
)的返回类型


确实没有办法解决这个问题。

在项目中引用DLL不会将DLL的代码包含(复制)到项目中。如果
BAL
Commons
中定义的对象返回到
WebUI
,则
WebUI
还需要对
Commons
的引用,以便它知道返回的类型


如果需要解决此问题的方法,可以尝试使用合并程序集,然后引用合并的程序集。我建议在软件发布期间这样做。否则,这似乎会使开发和调试更加繁琐。

在项目中引用DLL不会将DLL的代码包含(复制)到项目中。如果
BAL
Commons
中定义的对象返回到
WebUI
,则
WebUI
还需要对
Commons
的引用,以便它知道返回的类型


如果需要解决此问题的方法,可以尝试使用合并程序集,然后引用合并的程序集。我建议在软件发布期间这样做。否则,似乎会使开发和调试更加繁琐。

您不认为Visual Studio应该自动处理此类项目引用层次结构吗?不,不太可能。。因为您可能会遇到这样一个场景:WebUI只使用BAL中的一些方法,这些方法不会公开或处理Commons中定义的任何类型。在这种情况下,您不需要引用Commons。那么Visual Studio如何才能为您做出这样的决定呢?这很简单,因为在任何情况下,任何引用项目都需要复制dll。那么,为什么不自动引用呢?你不认为Visual Studio应该自动处理这种项目引用层次结构吗?不,不是真的。。因为您可能会遇到这样一个场景:WebUI只使用BAL中的一些方法,这些方法不会公开或处理Commons中定义的任何类型。在这种情况下,您不需要引用Commons。那么Visual Studio如何才能为您做出这样的决定呢?这很简单,因为在任何情况下,任何引用项目都需要复制dll。那么为什么不自动引用呢?那真是一团糟,如果我为体系结构中的每个模块创建单独的dll,我怎么能在解决方案中的每个项目中添加100个项目引用呢。@ManishRawat-除非您正在构建Office,否则在解决方案中添加100个程序集可能太过分了。。只是一个想法。不过,当我看到WebUI的bin/文件夹时,我可以看到所有的dll都复制到了那里。这意味着VisualStudio会自动复制dll,但不会自动引用它们。如果没有被引用,VS似乎不太可能复制dll。可能这些文件是以前版本的遗留文件。尝试回收垃圾箱文件夹并重新构建。看看结果如何。它确实是在将dll复制到bin文件夹中。我想说的是,WebUI仅引用BAL,但我仍然在WebUI bin目录中找到了DAL/Commons dll,这是因为BAL依赖于DAL,DAL依赖于Commons。所以,它是自动复制的。那真是一团糟,如果我为体系结构中的每个模块创建单独的dll,我怎么能在解决方案中的每个项目中添加100个项目引用呢。@ManishRawat-除非您正在构建Office,否则在解决方案中添加100个程序集可能太过分了。。只是一个想法。不过,当我看到WebUI的bin/文件夹时,我可以看到所有的dll都复制到了那里。这意味着VisualStudio会自动复制dll,但不会自动引用它们。如果没有被引用,VS似乎不太可能复制dll。可能这些文件是以前版本的遗留文件。尝试回收垃圾箱文件夹并重新构建。看看结果如何。它确实是在将dll复制到bin文件夹中。我想说的是,WebUI仅引用BAL,但我仍然在WebUI bin目录中找到了DAL/Commons dll,这是因为BAL依赖于DAL,DAL依赖于Commons。所以,它是自动复制的。