我在.NET中遇到一些强大的命名库依赖项问题。我的项目本身并不强大,我正在使用nuget用于所有第三方库 - 这些都是强大和弱名称的,通常是OSS项目的混合。
作为示例,假设以下依赖关系链
My Project ---> A ---> B
并说我在OSS库B
中发现了一个问题,因此维护了一个带有错误修正和自定义的本地分支。但是B
被强名称并且私钥不可用,所以我只能生成弱命名的本地构建。
如何构建我的项目,使A
的二进制版本引用我B
的本地副本?默认情况下,我在运行时收到程序集绑定错误,可能是因为我本地构建的程序集中的公钥标记是null
,并且与A
所期望的不一致。据我所知,binding-redirects
中的App.config
用于重定向程序集版本号,而不是公钥值。
我确实设法通过反汇编A
来解决这个问题,删除IL中publickeytoken
的程序集引用中的B
字段并重新组装 - 这样可行,但看起来很糟糕。
有没有更好的方法来达到预期的结果?它似乎是一个主要缺点,并且在.NET上使用OSS软件包时会产生一定的反作用 - 相反,我必须等待一个新的二进制版本并希望它包含我所追求的修复。