2015-04-28 2 views
2

Я пытаюсь создать однозадачное самообслуживаемое приложение с веб-API. Я начал использовать OWIN и katana, но не смог их объединить в конце. Итак, я сделал очень крошечный образец проекта без OWIN и katana, только для Web API.WebAPI и ILMerge (aka self-hosted single exe)

В моей папке вывода я получаю эти файлы:

  • Newtonsoft.Json.dll
  • System.Net.Http.Formatting.dll
  • System.Web.Http.dll
  • системы .Web.Http.SelfHost.dll

и конечно консоль приложение само по себе, и в этом случае:

  • WebAPI_self_hosted.exe

Если я копирую все 5 файлов в другой machinge, все работает отлично.

Когда я пытаюсь 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

+1

Есть повторяющиеся типы, так что вам нужно настроить ILMerge правильно обращаться с ними, например, с помощью опции/allowDup. В сообщении об ошибке говорится все. –

+0

Хей Ли! :-) Спасибо за ответ (хотя это комментарий, поэтому я не могу отметить его при ответе). Это действительно было/allowDup. В командной строке были и другие параметры, но он отлично работает с/allowDup как единственным параметром. Теперь мне просто нужно выяснить, как использовать его с задачей ILMerge :-) –

+0

Я скопировал его на ответ. Вы можете принять его, чтобы помочь другим найти нужную информацию. –

ответ

0

Есть повторяющиеся типы, так что вы должны настроить ILMerge для правильной обрабатывать их, например, использовать параметр/allowDup. В сообщении об ошибке говорится все.

+0

Я использую MSBuild.ILMerge.Task, чтобы избежать командной строки, и я не могу найти, как использовать параметр allowDup. Не могли бы вы рассказать мне, как это сделать? – Julian50

+0

@ Julian50 это проект с открытым исходным кодом, поэтому обратитесь к его разработчикам. –

0

Отказ от ответственности: Это не оригинальный ответ

Для тех из вас, с помощью задачи MSBuild ILMerge (https://ilmergemsbuild.codeplex.com/), игнорировать повторяющиеся типы, файл ILMerge.props должен иметь значение, как «*» (игнорировать ВСЕ типы)

<ILMergeAllowDuplicateType>*</ILMergeAllowDuplicateType> 

Источник: MSBuild.ILMerge.Task not allowing Duplicate Types

Смежные вопросы