为什么ILMerge在发布时什么都不做?

时间:2010-08-13 01:51:33

标签: c# clickonce publish ilmerge

ILMerge通常在构建Release时合并我的程序集,但是当发布ClickOnce时,生成的EXE不包含应该合并的DLL。

我认为ILMerge正在运行,但Publish正在用旧的原始程序覆盖新的合并程序集。我做了一个Post-Build事件,在ilmerge运行后立即停止了构建,它按预期合并。

为什么会发生这种情况,是否有解决方法?

2 个答案:

答案 0 :(得分:0)

ClickOnce在执行发布之前执行构建。如果您想要对部署进行更改,则必须手动组装文件并使用MageUI编辑部署清单(.application文件)和应用程序清单(yourapp.exe.manifest文件)并重新签名文件。

答案 1 :(得分:0)

显然,在项目构建之后,并且构建后脚本运行后,Publish将输出文件从obj目录重新复制到bin目录(可能是因为它修改了清单文件)。至少在Visual Studio 2010中。

我通过在ilmerge行之后将其添加到我的构建后脚本来修复此问题:

ECHO将程序集从bin复制回obj目录:COPY“$(TargetFileName)”“.... \ obj \ $(ConfigurationName)” COPY“$(TargetFileName)”“.... \ obj \ $(ConfigurationName)”

它将文件复制回obj目录,因此Publish可以使用正确的文件来完成它。