使用传递项目依赖项观察构建?

时间:2011-03-04 15:33:25

标签: c# .net

你好:)我是C#/ .NET的新手,我对项目依赖有一些疑问。

第一:我的情况。我有一个解决方案 - 让我们称之为MyLibrary - 它有几个.dll-Output项目。这些项目彼此依赖(作为项目引用),也来自某些外部库(.dll-References)。我确保项目引用了外部引用的特定副本。

现在我有了第二个解决方案 - MyApplication - 它有一些上面的Library-Projects和其他项目。所以我所有的项目都引用了彼此的iva项目参考。我已使用参考设置“Copy Local:True”设置所有项目。

我现在的问题是,MyApplication抛出一个错误,说其中一个库项目有不同的版本 - 这很奇怪,因为如果我构建MyApplication它应该构建所有必需的项目。

我现在的问题:

  • 如果我的项目C依赖于项目B再次依赖于项目A,我需要参考项目C中的项目A,即使项目C不使用项目A中的任何类型。是否有解决方法?
  • 我可以获得一个干净的输出日志,其中说明何时构建哪个项目?从Visual Studio输出日志我有麻烦不同项目是“重建”或只是已复制到目标文件夹
  • 是否有工具,它们会读出* .sln或* .csproj文件并直接向我展示哪些装配参考哪个装配?
  • 正如我所说,我在MyApplication中包含了MyLibrary的几个项目,并将MyProlication中MainProject的引用设置为“Copy Local:True”。如果我清理MyApplication(解决方案),它将从MyLibrary-Destination-Folder中删除所有* .dll。我能否以某种方式压制这种行为(它应该只从MyApplication-destination-folder中删除* .dll)。

感谢你的帮助。

P.S。:我来自德国,我有“Galileo” - 关于C#的书籍,涵盖了这个主题并不是很好。是否有一些很好的教程/书籍直接与Visual Studio的项目管理功能有关?

2 个答案:

答案 0 :(得分:6)

回答你的几个问题:

  

如果我有依赖的项目C.   项目B又取决于   项目A,我需要参考项目   项目C中的A,即使项目C没有   使用项目A中的任何类型。是否存在   解决这个问题?

总的来说,我不认为这是真的。如果B公开了A中的某些类型,你只需要引用A.例如,如果B中的类继承A中的类然后是,则C将需要A,因为C需要知道基类。但是,如果B'隐藏'背后的A是自己的类/接口,那么C不需要知道A。

  

是否有工具,读出来的   * .sln或* .csproj文件并直接显示哪些组合引用   哪个组装?

您可以直接从程序集的元数据中获取此信息。 Reflector是一个很好的工具。这是免费的,但似乎他们4天前就开始收费了(真糟糕!)

关于视觉工作室问题的另外两个问题我并不熟悉。但总的来说,我很惊讶你得到版本错误。您是否尝试使用强名称程序集?我个人不会建议除非你向公众提供这些集会。这些程序集仅用于在您自己的应用程序中分离关注点,因此不应该真正版本化。生成的应用程序将根据每个子项目的最新版本进行编译,每个子项目只会在更改时进行编译。

在任何情况下,您都必须在某处指定您需要特定版本的特定程序集(可能在app.config / web.config中)。你能从这个配置中删除版本约束吗?

答案 1 :(得分:0)

引用詹姆斯·冈特答案

  

我一般认为这不是真的。仅当B公开A中的某些类型时,才需要引用A。例如,如果B中的类继承自A中的类,则是,C将需要A,因为C需要了解基类。但是,如果B在所有>之后“隐藏” A是自己的类/接口,则C不需要了解A。

非常感谢您的澄清!为了自己复制,我创建了一个示例解决方案,其中包含3个项目:ABC;有关以下项目的更多详细信息:

  • 项目C 没有解决方案上的任何项目的引用;它还定义了一个名为FooC的类。
  • 项目B 引用了项目C ,并定义了一个名为FooB的类,该类还包含两个方法:PrintB和{ {1}}。 PrintC返回类型是一个原始值(一个PrintB),而int返回类型是一个PrintC实例(在项目C上定义的类)。
  • 项目A 引用了项目B ,并使用了在项目B 上实现的功能(FooC类)。 / li>

因此,如果项目A中的某人调用FooB方法,则必须引用项目C ,仅因为其返回的类型是在上定义的类型(类)项目C(编译器必须解决此依赖性)。但是,如果不是调用PrintC方法,而是调用PrintC,则不需要引用 project C ,因为它的返回类型是原始类型(一个已知的)。