gpt4 book ai didi

.net - ILMerge 忽略 bindingRedirect

转载 作者:行者123 更新时间:2023-12-05 07:51:14 24 4
gpt4 key购买 nike

我有项目 A,它引用程序集 B 和程序集 C。程序集 B 也引用程序集 C,但在不同于项目 A 的版本中。两个程序集(B 和 C)都通过 NuGet 在项目 A 中引用(尽管两者都是程序集在我自己的控制之下,所以如果必须的话,我可以改变它们的构建方式)我希望这张图能说明我的意思:程序集层次结构:

enter image description here

在项目 A 中,我有一个 app.config,它在程序集 C 上有一个 bindingRedirect 以将所有版本从 0.0.0.0 到 1.1.0.0 指向版本 1.1.0.0:

<dependentAssembly>
<assemblyIdentity name="C" publicKeyToken="447cd79fe2efd739" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
</dependentAssembly>

所有程序集(B 和 C)都已签名并且具有强名称。如果我构建项目,一切正常,因为 bindingRedirect 被 Visual Studio 考虑并始终指向程序集 C 的版本 1.1.0.0。但是,如果我尝试将项目 A(也是程序集)的输出与程序集 B (1.0) 和程序集 C (1.1) 进行 ILMerge,则会出现以下错误:

There was an error merging the assemblies: 
An exception occurred during merging:
Unresolved assembly reference not allowed: C.
bei System.Compiler.Ir2md.GetAssemblyRefIndex(AssemblyNode assembly)
bei System.Compiler.Ir2md.GetTypeRefIndex(TypeNode type)
bei System.Compiler.Ir2md.VisitReferencedType(TypeNode type)
bei System.Compiler.Ir2md.VisitMethod(Method method)
bei System.Compiler.Ir2md.VisitClass(Class Class)
bei System.Compiler.Ir2md.VisitModule(Module module)
bei System.Compiler.Ir2md.SetupMetadataWriter(String debugSymbolsLocation)
bei System.Compiler.Ir2md.WritePE(Module module, String debugSymbolsLocation, BinaryWriter writer)
bei System.Compiler.Writer.WritePE(String location, Boolean writeDebugSymbols, Module module, Boolean delaySign, String keyFileName, String keyName)
bei System.Compiler.Writer.WritePE(CompilerParameters compilerParameters, Module module)
bei ILMerging.ILMerge.Merge()
bei ILMerging.ILMerge.Main(String[] args)

如果我将程序集 B 的项目更新为也指向程序集 C 的 1.1 版,一切正常,但这不是我想要实现的。

所以我认为问题在于,ILMerge 没有考虑项目 A 的 app.config。知道如何在不总是更新层次结构链中的所有项目的情况下解决这个问题吗?或者对我做错了什么有什么建议吗?

最佳答案

ILRepack支持这种情况,并将对程序集 C 的任何调用重定向到合并版本。

但是这样做并没有查看绑定(bind)重定向,并且假设您要求合并的版本(在命令行上)是您唯一想要使用的版本。如果版本 1.01.1 以不兼容的方式存在差异(例如,B 中使用的类型已从 C 1.1)

关于.net - ILMerge 忽略 bindingRedirect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35198102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com