C# 如何在安装项目中使用IlMerge?
我已经使用IlMerge将我的项目的所有DLL合并到一个exe中。我使用一个目标文件,该文件在主csproj的“导入”中引用 目标中的execk命令是:C# 如何在安装项目中使用IlMerge?,c#,installation,ilmerge,C#,Installation,Ilmerge,我已经使用IlMerge将我的项目的所有DLL合并到一个exe中。我使用一个目标文件,该文件在主csproj的“导入”中引用 目标中的execk命令是: <Exec Command=""$(ProgramFiles)\Microsoft\Ilmerge\Ilmerge.exe" /out:@(MainAssembly) "@(IntermediateAssembly)" @(IlmergeAssemblies-&g
<Exec Command=""$(ProgramFiles)\Microsoft\Ilmerge\Ilmerge.exe" /out:@(MainAssembly) "@(IntermediateAssembly)" @(IlmergeAssemblies->'"%(FullPath)"', ' ')" />
这很有效
但是我有一个安装项目,当它构建时,它会忽略“导入”,并且不会合并DLL。如何在安装项目中使用目标文件
我曾尝试在主项目的后期生成事件(在项目属性中)中为Ilmerge编写相同的代码,但它给了我错误代码1。我建议您在中签出Ilmerge任务。ILMerge任务的文档包含在中。它将消除像现在这样指定确切命令行参数的复杂性 关于您的特定问题,除了错误代码1之外,您是否因此收到任何其他错误消息?评论,我将尽可能编辑我的回复。我的解决方案是: 我将Ilmerge目标文件的导入放在csproj中,如下所示:
<Project
DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Target Name="AfterBuild">
<CreateItem Include="@(ReferencePath)" Condition="'%(CopyLocal)'=='true'">
<Output TaskParameter="Include" ItemName="IlmergeAssemblies"/>
</CreateItem>
<Message Text="MERGING: @(IlmergeAssemblies->'%(Filename)')" Importance="High" />
<Exec Command=""$(ProgramFiles)\Microsoft\Ilmerge\Ilmerge.exe" /out:@(MainAssembly) "@(IntermediateAssembly)" @(IlmergeAssemblies->'"%(FullPath)"', ' ') /log:ILMerge.log" />
</Target>
<Target Name="_CopyFilesMarkedCopyLocal"/>
</Project>
然后在安装项目中,我没有将我的exe作为主要输出,而是将其作为文件及其本地化的资源和内容
我认为这是可行的,但遗憾的是,在将应用程序打包到setup exe之前,我无法执行应用程序的postbuild事件(ilmerge进程)。请看我的答案,太长了,无法添加注释。