如何管理C#/.NET项目中的版本依赖关系?

如何管理C#/.NET项目中的版本依赖关系?,.net,dependencies,reference,.net,Dependencies,Reference,假设您有一个项目,该项目具有各种dll依赖项,但树的外观如下所示: Project A => Project B => Project C => Project D => Project C => Project E => Project C, v2 有没有一种方法可以使用Project E,因为它依赖于较新版本的Project C(dll),即使项目的其余部分使用的是同一库的较旧版本

假设您有一个项目,该项目具有各种dll依赖项,但树的外观如下所示:

Project A 
    => Project B
        => Project C
    => Project D
        => Project C
    => Project E
        => Project C, v2
有没有一种方法可以使用Project E,因为它依赖于较新版本的Project C(dll),即使项目的其余部分使用的是同一库的较旧版本


如果没有一种方法,或者说没有一种方法会造成很多麻烦,那么有没有一种前瞻性的解决方案来防止这种情况在未来的项目中发生?

从长期解决方案来看,不确定这是否能在您的环境中起作用,但我们有多个相关项目(从框架到相关系统)可供参考。我们使用subversion和externals来引用库/源文件夹,以便所有依赖项目都引用相同的版本

我们还有一些项目,在这些项目中,我们引入了依赖库,这些依赖库在编译时可能使用了旧版本,而不是主引用应用程序包含的更新的向后兼容的共享库,在这种情况下,我们使用了使用配置项的

实际上,我们的构建过程标记如下(其中_build _VERSION u被当前构建编号的构建过程替换):



同一篇文章还可以引用项目中相同程序集的多个版本副本。

所有项目都在同一个解决方案中吗?要回答的一个问题可能是,项目C的v2是否向后兼容。如果项目B和D使用较新的版本,它们还会工作吗?这个问题似乎与你的情况有关:你可能还能够处理。
<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="Company.DependentAssembly" publicKeyToken="8510b56c219df72e"/>
            <bindingRedirect oldVersion="1.0.0.0-99.0.0.0" newVersion="_BUILD_VERSION_"/>
        </dependentAssembly>