【问题标题】:Fixing binding redirects for a large project修复大型项目的绑定重定向
【发布时间】:2019-03-09 23:35:07
【问题描述】:

我有一个解决方案,其中包含一个引用其他几个项目的 Web API 项目。那里还有另一个项目,其中包含一堆 Azure 函数,以及一些旧的已弃用工作角色的项目。

绑定重定向和 Nuget 一直是我存在的祸根。我得到了很多依赖错误,这些错误似乎取决于我在哪个平台上运行我的程序:

System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies

经过一些研究,我的最佳猜测是 Web API 使用自己的绑定重定向规则加载第一组 DLL,如果另一个项目需要不同绑定重定向指定的不同 DLL,它找不到它并且失败。

我发现我能够通过整合我的所有 nuget 包并使所有绑定重定向与 Web API 的绑定重定向匹配来修复我的项目......但是,现在一切似乎都正常,除了 VSTS 测试,它继续生成 FileNotFoundExceptions DLL。

所以,我不只是要求 SO 为我修复我的项目(因为它太大了会很困难),我更感兴趣的是 什么是大型项目的经验法则,比如我的有一堆依赖问题?例如,所有绑定重定向是否应该相同,或者如果它们不同也可以?我应该以其他方式组织我的依赖项吗?你会怎么做才能解决这个问题?

【问题讨论】:

    标签: c# dependencies nuget dependency-management assembly-binding-redirect


    【解决方案1】:

    也许它有助于:

    • 确保依赖的依赖使用相同的包版本(这可能会导致错误发生,即项目A使用项目B,项目B使用Package v4.0,而项目A使用Package v4.1 .

    • 确保在“项目 A/项目 B”示例中,如果项目 A 直接使用 dll,则项目 B 也会这样做,或者对两者都使用 nuget 包。

    根据我的经验,这可能非常耗时,祝你好运!

    PS:包管理器控制台的这个命令也有帮助:

    Update-Package -ProjectName YourProject -reinstall
    

    【讨论】:

    • 嗯...当我有各种疯狂的依赖时,我如何确保依赖的依赖使用相同的包版本。例如,项目 A 使用包 X 和 Y,但项目 B 使用包 Z,它依赖于不同版本的包 X。项目 C 使用项目 A、项目 B,并且直接依赖于包 Y。是否有一些集中的处理这种依赖网络的方法?我们有一个“核心”项目......也许我们可以将所有依赖项放入该项目中,然后让所有其他项目依赖它?这是一种有效的技术吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 2010-10-02
    • 1970-01-01
    相关资源
    最近更新 更多