WebAPI和ILMerge(又名自托管单个exe)

时间:2015-04-28 08:37:29

标签: c# asp.net-web-api self-hosting ilmerge

我尝试使用Web API构建单个可执行的自托管应用程序。 我开始使用OWIN和katana,但最终无法将它们合并。 所以我做了一个非常小的示例项目,没有OWIN和katana,仅限Web API。

在我的输出文件夹中,我收到了以下文件:

  • Newtonsoft.Json.dll
  • System.Net.Http.Formatting.dll
  • System.Web.Http.dll
  • System.Web.Http.SelfHost.dll

当然还有控制台应用程序本身,在这种情况下:

  • WebAPI_self_hosted.exe

如果我将所有5个文件复制到不同的工具上,一切正常。

当我尝试ILMerge它们时,我收到以下错误:

ILMerge.Merge: ERROR!!: Duplicate type 'System.Net.Http.HttpRequestMessageExtensions' found in
assembly 'System.Web.Http.SelfHost'. Do you want to use the /alllowDup option?
at ILMerging.ILMerge.MergeInAssembly(AssemblyNode a, Boolean makeNonPublic, Boolean targetAssemblyIsComVisible)
at ILMerging.ILMerge.Merge()
at ILMerging.ILMerge.Main(String[] args)

请原谅,如果这个问题不符合stackoverflow标准,但我在过去两天(甚至ilrepack)尝试了很多,而且现在,我感谢每一个提示: - )

另见附有项目的帖子: Error 2 The type <T> exists in both... with ILMerge

2 个答案:

答案 0 :(得分:0)

有重复的类型,因此您需要配置ILMerge以正确处理它们,例如使用/ allowDup选项。错误消息说明了一切。

答案 1 :(得分:0)

免责声明:这不是原始答案

对于那些使用MSBuild ILMerge任务(https://ilmergemsbuild.codeplex.com/)的人来说,要忽略重复类型,ILMerge.props文件的值应为&#34; *&#34; (忽略所有类型)

<ILMergeAllowDuplicateType>*</ILMergeAllowDuplicateType>

来源: MSBuild.ILMerge.Task not allowing Duplicate Types