Еще немного информации, которая может быть полезна для некоторых людей, реализующих решение Скотта Хансельмана .
Когда я впервые настроил это, он жаловался на невозможность разрешить ссылки на System.Core и т. Д.
Это как-то связано с поддержкой .NET 4. Исправляет это включение аргумента / lib, указывающего на каталог .NET 4 Framework (на самом деле это просто $ (MSBuildBinPath)).
/lib:$(MSBuildBinPath)
Затем я обнаружил, что IlMerge зависает при слиянии. Он использовал немного процессора и много оперативной памяти, но ничего не выводил. Я нашел исправление в стеке, конечно, .
/targetplatform:v4
Я также обнаружил, что некоторые свойства MSBuild, использованные в статье блога Скотта, основаны на выполнении MsBuild из каталога проекта, поэтому я немного их подправил.
Затем я переместил target & ilmerge.exe в папку инструментов нашего дерева исходных текстов, что потребовало еще одного небольшого изменения путей ...
Я наконец-то получил следующий элемент Exec , чтобы заменить элемент в оригинальной статье Скотта:
<Exec Command=""$(MSBuildThisFileDirectory)Ilmerge.exe" /lib:$(MSBuildBinPath) /targetplatform:v4 /out:@(MainAssembly) "$(MSBuildProjectDirectory)\@(IntermediateAssembly)" @(IlmergeAssemblies->'"%(FullPath)"', ' ')" />
UPDATE
Я также нашел в ответе Logic Labs о сохранении поведения CopyLocal и просто исключении ilMerged сборок из CopyLocal, если вы используете пакеты Nuget. В противном случае вам нужно указать аргумент / lib для каждого каталога пакетов ссылочных сборок, которые не объединяются.