5

我在项目中使用以下构建后操作,将 lib 合并到我的应用程序中:

IF $(ConfigurationName) == Debug GOTO end
cp $(TargetPath) $(TargetDir)app_unmerged.exe
del $(TargetPath)
"C:\Program Files\Microsoft\ILMerge\ilmerge.exe" /internalize $(TargetDir)MyApp_unmerged.exe $(TargetDir)someLib.dll /out:$(TargetDir)myApp.exe
del $(TargetDir)myApp_unmerged.exe $(TargetDir)someLib.dll
:end

这工作正常。现在我有一个安装程序项目并添加了项目输出。我希望使用“来自的主要输出”,即 /bin/Release 中的 exe。但实际上不是 /bin/release/myApp.exe ,而是 /obj/release/myApp.exe 被使用。

有谁知道我是否可以更改此行为并将 /bin/release 中的输出用于安装程序项目?谢谢。

4

3 回答 3

2

我解决了在 /obj 文件夹中应用 Ilmerge 的问题,这是我的构建后事件配置:

COPY $(ProjectDir)obj\$(PlatformName)\$(ConfigurationName)\$(TargetFileName) $(TargetDir)temp.exe $(solutionDir)\lib\ilmerge /wildcards /t:exe /out:"$(ProjectDir) obj\$(PlatformName)\$(ConfigurationName)\$(TargetFileName)" "$(TargetDir)temp.exe" "$(TargetDir)log4net.dll" "$(TargetDir)other.dll" DEL $(TargetDir)temp 。可执行程序

于 2011-04-04T20:52:19.860 回答
1

我明确地放置了文件,这意味着它没有告诉安装项目使用初级内容,而是明确地放置了 .exe/.dll 文件。
这很好用,我可以控制要输入的文件以及设置项目用户的相对路径,以便可以在其他机器上使用设置项目。

于 2009-04-01T13:32:22.940 回答
1

似乎这个问题没有真正的解决方案,但存在一种解决方法。我在 Microsoft Connect 上创建了一张票:https ://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=428898

微软的回答:

你好,

为了执行这些构建后操作,您需要将它们放在一个批处理文件中,然后添加适当的命令以在构建后事件对话框中调用批处理文件。我看到脚本中有几个实例引用了许多 Visual Studio 变量。由于我们没有将这些变量公开为环境变量,因此您必须将它们作为参数传递给批处理文件。

我希望这会有所帮助!

Candy Chiang 项目经理 - Visual Studio

于 2009-05-09T10:40:25.410 回答