- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有项目 A,它引用程序集 B 和程序集 C。程序集 B 也引用程序集 C,但在不同于项目 A 的版本中。两个程序集(B 和 C)都通过 NuGet 在项目 A 中引用(尽管两者都是程序集在我自己的控制之下,所以如果必须的话,我可以改变它们的构建方式)我希望这张图能说明我的意思:程序集层次结构:
在项目 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.0
和 1.1
以不兼容的方式存在差异(例如,B 中使用的类型已从 C 1.1
)
关于.net - ILMerge 忽略 bindingRedirect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35198102/
在新 PC 上运行 ILMerge。 在其他 PC 上运行良好,但现在退出并显示错误 -2146232576。为什么? 最佳答案 -2146232576 十进制是 80131700 十六进制。 错误
我尝试过: C:\Windows\System32>ilmerge /target:winexe /out:c:\output.exe c:\MyProgram.exe c:\Microsoft.Wi
我们有一个应用程序,其编译后的结构如下所示: 富 一氧化氮 Text.resources.dll SV-SE Text.resources.dll Bar.dll Foo.exe Text.dll 是
我正在尝试使用 ILMerge 创建一个使用 Windows Azure SDK 2.0 的单个可执行文件,包括 Microsoft.WindowsAzure.ServiceRuntime.dll,这
我正在尝试设置大量构建代理,到目前为止,我可以静默安装所有依赖项(使用 powershell、nuget 和 Chocolatey)。 但是,如果没有弹出该死的 GUI,我就无法安装工具 IlMerg
我正在使用 ILMerge 来组合 9 个用 C# .NET 4 编写的 .NET DLL。问题是 ILMerge 卡住了,没有错误消息或任何东西。 日志显示 ILMerge 正确合并了所有程序集,然
例如,假设我想使用 Bouncy Castle在我的 DLL 中。由于我想简化部署,所以我使用 ILMerge 来组合 MyDll.dll和 BouncyCastle.Crypto.dll生产MyDl
我知道 ilmerge 是一个控制台应用程序,但是当我运行它时,它会运行一秒钟然后关闭。所以下面是我尝试使用的预构建代码,它给出了这个问题。 Error 1 The command "ilme
感谢您花时间帮助我。使用:Microsoft Visual C# 2010 Express 我有两个文件:RJFCModPackInstaller.exe 和 Ionic.Zip.dll 我想合并成一
我已经使用 IlMerge 将我项目的所有 dll 合并到一个 exe 中。我使用在主 csproj 的“导入”中引用的目标文件。 目标中的 ExecCommand 是: '"%(Ful
我正在使用 ILMerge 版本 2.11.1103.0 将 4 个 DLL 合并到一个新程序集中。假设分别称为A、B、C、D,则它们之间的关系如下: B -> A C -> A D -> A D -
我正在使用 ILMerge 从包含 1 个 exe 和 2 个资源 dll 的项目中创建单个程序集应用程序: \bin\Debug\test.exe \bin\Debug\nl-BE\test.res
我试图将 .dll 文件放入我的 .exe 文件中,但出现此错误: ILMerge.exe: The assembly 'Final' has a value for it's PeKind
我正在使用 ILMerge 合并控制台应用程序使用的库。合并后,生成的 exe 仅在一秒钟内完成执行并在后台运行(不显示 Console.WriteLine 的输出)。 我该怎么做才能将它作为控制台应
您使用 ILMerge 吗?您是否使用 ILMerge 合并多个程序集以简化 dll 的部署?在 ILMerging 程序集在一起后,您是否发现生产中的部署/版本控制存在问题? 我正在寻找有关使用 I
我有项目 A,它引用程序集 B 和程序集 C。程序集 B 也引用程序集 C,但在不同于项目 A 的版本中。两个程序集(B 和 C)都通过 NuGet 在项目 A 中引用(尽管两者都是程序集在我自己的控
我正在尝试使用 ILMerge 将一些传递引用的程序集内化到我正在引用的程序集中,以消除与我项目中其他传递依赖项的冲突。 特别是,我引用了 Antlr3.StringTemplate(以下简称 AS,
我正在使用 ILMerge 合并几个 .NET 程序集,包括一些第 3 方程序集。自从这样做以来,我遇到了几个错误,这些错误都归结为类型定义与定义它们的程序集相关联的事实。 一个简单的示例是我的 Ap
我需要合并一些 dll,文件名和程序集名称都需要与我的主 dll (mydll.dll) 相同。我还需要 pdb 文件。我如何完成这项工作? 以下是我尝试过的一些方法: 只需使用 ILMerge my
我有两个 .NET 库:“Foo.Bar”和“Foo.Baz”。 “Foo.Bar”是独立的,而“Foo.Baz”引用“Foo.Bar”。 假设我执行以下操作: 使用 ILMerge 将“Foo.Ba
我是一名优秀的程序员,十分优秀!