你好:)我是C#/ .NET的新手,我对项目依赖有一些疑问。
第一:我的情况。我有一个解决方案 - 让我们称之为MyLibrary - 它有几个.dll-Output项目。这些项目彼此依赖(作为项目引用),也来自某些外部库(.dll-References)。我确保项目引用了外部引用的特定副本。
现在我有了第二个解决方案 - MyApplication - 它有一些上面的Library-Projects和其他项目。所以我所有的项目都引用了彼此的iva项目参考。我已使用参考设置“Copy Local:True”设置所有项目。
我现在的问题是,MyApplication抛出一个错误,说其中一个库项目有不同的版本 - 这很奇怪,因为如果我构建MyApplication它应该构建所有必需的项目。
我现在的问题:
感谢你的帮助。
P.S。:我来自德国,我有“Galileo” - 关于C#的书籍,涵盖了这个主题并不是很好。是否有一些很好的教程/书籍直接与Visual Studio的项目管理功能有关?
答案 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个项目:A
,B
和C
;有关以下项目的更多详细信息:
FooC
的类。FooB
的类,该类还包含两个方法:PrintB
和{ {1}}。 PrintC
返回类型是一个原始值(一个PrintB
),而int
返回类型是一个PrintC
实例(在项目C上定义的类)。FooC
类)。 / li>
因此,如果项目A中的某人调用FooB
方法,则必须引用项目C ,仅因为其返回的类型是在上定义的类型(类)项目C(编译器必须解决此依赖性)。但是,如果不是调用PrintC
方法,而是调用PrintC
,则不需要引用 project C ,因为它的返回类型是原始类型(一个已知的)。