Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在安装项目中使用IlMerge?_C#_Installation_Ilmerge - Fatal编程技术网

C# 如何在安装项目中使用IlMerge?

C# 如何在安装项目中使用IlMerge?,c#,installation,ilmerge,C#,Installation,Ilmerge,我已经使用IlMerge将我的项目的所有DLL合并到一个exe中。我使用一个目标文件,该文件在主csproj的“导入”中引用 目标中的execk命令是: <Exec Command="&quot;$(ProgramFiles)\Microsoft\Ilmerge\Ilmerge.exe&quot; /out:@(MainAssembly) &quot;@(IntermediateAssembly)&quot; @(IlmergeAssemblies-&g

我已经使用IlMerge将我的项目的所有DLL合并到一个exe中。我使用一个目标文件,该文件在主csproj的“导入”中引用

目标中的execk命令是:

  <Exec Command="&quot;$(ProgramFiles)\Microsoft\Ilmerge\Ilmerge.exe&quot; /out:@(MainAssembly) &quot;@(IntermediateAssembly)&quot; @(IlmergeAssemblies->'&quot;%(FullPath)&quot;', ' ')" /> 

这很有效

但是我有一个安装项目,当它构建时,它会忽略“导入”,并且不会合并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="&quot;$(ProgramFiles)\Microsoft\Ilmerge\Ilmerge.exe&quot; /out:@(MainAssembly) &quot;@(IntermediateAssembly)&quot; @(IlmergeAssemblies->'&quot;%(FullPath)&quot;', ' ') /log:ILMerge.log" /> 

 </Target>

 <Target Name="_CopyFilesMarkedCopyLocal"/>

</Project>

然后在安装项目中,我没有将我的exe作为主要输出,而是将其作为文件及其本地化的资源和内容


我认为这是可行的,但遗憾的是,在将应用程序打包到setup exe之前,我无法执行应用程序的postbuild事件(ilmerge进程)。

请看我的答案,太长了,无法添加注释。