我们有一个包含程序集LibA和LibB的.Net应用程序AppA。
LibB也引用了LibA;它是在不久前构建的并放入我们的软件包存储库中,因此它是针对旧版本的LibA构建的,而不是直接包含在AppA中。没有一个库被强烈命名。
当我们运行AppA时,只使用最新版本的LibA; LibB对LibA的所有引用都很乐意使用最新版本而不是LibB构建的版本。
但是,当我们将这些程序集放在Dotfuscator中时,Dotfuscator会将来自LibB的对LibA的引用视为引用完全不同的程序集,然后将LibA传递给Dotfuscator。因此,在混淆的应用程序中,从LibB到LibA的引用不会更新以反映LibA的混淆,因此在运行时会失败。
解决方法是确保我们的所有程序集都与其他程序集的完全相同。这修复了混淆的应用程序,但它破坏了我们的包管理策略的目的,它应该允许我们的每个库按照自己的进度发展。我们开发的大量软件包很难扩展。
我在Dotfuscator中错过了一些开关或设置(我们使用商业版的4.8版本,但可以升级),这将使它仅通过名称解析程序集引用,就像.Net在运行时一样,所以混淆会按照我们期望的方式运作吗?
答案 0 :(得分:2)
免责声明,我是Prefmptive Solutions的员工,Dotfuscator的开发人员。
今天发布的版本4.33.0(2017年11月21日)包含针对此问题的修复程序。此外,Assembly Binding Redirection现在可用于更明确地说明要解决的程序集。