【问题标题】:Why does ILMerge do nothing when publishing?为什么发布时 ILMerge 什么都不做?
【发布时间】:2010-08-13 01:51:33
【问题描述】:
ILMerge 通常在构建版本时可以很好地合并我的程序集,但在为 ClickOnce 发布时,生成的 EXE 不包含应该合并的 DLL。
我认为 ILMerge 正在运行,但 Publish 正在用旧的原始程序集覆盖新的合并程序集。我做了一个 Post-Build 事件,在 ilmerge 运行后立即停止了构建,并按预期合并。
为什么会发生这种情况,是否有解决方法?
【问题讨论】:
标签:
c#
clickonce
publish
ilmerge
【解决方案1】:
ClickOnce 在发布之前执行构建。如果您想对部署进行更改,则必须手动组装文件并使用 MageUI 编辑部署清单(.application 文件)和应用程序清单(yourapp.exe.manifest 文件)并重新签署文件。
【解决方案2】:
显然,在项目构建后,构建后脚本运行后,Publish 将输出文件从 obj 目录重新复制到 bin 目录(可能是因为它修改了清单文件)。至少在 Visual Studio 2010 中。
我通过在 ilmerge 行之后将其添加到我的构建后脚本来解决此问题:
ECHO 将程序集从 bin 复制回 obj 目录:COPY "$(TargetFileName)" "....\obj\$(ConfigurationName)"
COPY "$(TargetFileName)" "....\obj\$(ConfigurationName)"
它将文件复制回 obj 目录,以便 Publish 可以使用正确的文件执行其操作。