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