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

luc*_*iet 8 .net dependencies reference

假设您有项目A,并且它具有各种dll依赖项,但树看起来像这样:

Project A 
    => Project B
        => Project C
    => Project D
        => Project C
    => Project E
        => Project C, v2
Run Code Online (Sandbox Code Playgroud)

有没有办法使用Project E,因为它依赖于较新版本的Project C(dll),即使项目的其余部分使用的是同一个库的旧版本?

如果没有办法,或者会导致咬牙切齿的方法,是否有一种前瞻性的解决方案来防止这种情况在未来的项目中发生?

小智 5

从长期解决方案来看,不确定这是否适用于您的环境,但我们有多个依赖项目(从框架到依赖系统)我们参考.我们使用subversion并使用externals引用libary/source文件夹,以便所有依赖项目引用相同的版本.

我们还有一些项目,我们引入依赖库,它们在编译时可能使用旧版本,而不是主要引用应用程序包含的新版本和向后兼容的共享库,在这种情况下,我们使用使用该版本多版本解决方案.配置条目.

实际上我们的构建过程标记类似于(其中_BUILD_VERSION_被构建过程替换为当前构建号):

<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>
Run Code Online (Sandbox Code Playgroud)

同一篇文章还提供了一种引用项目中相同程序集的多个版本副本的方法.