Ответ 1
Я не могу найти хорошую документацию по этому поводу, но, как было предложено сообщение блога Matt Wrocks и еще один вопрос об ILMerge, я сначала попытался использовать тот же путь Reference Assemblies, что и для .NET 4.
Казалось, что это работает сначала, прежде чем перенаправлять наши пакеты NuGet на .NET 4.5. (В частности, Microsoft.AspNet.WebApi.Client, который добавляет ссылку на новую сборку .NET 4.5 System.Net.Http.WebRequest, которая ранее была включена в пакет NuGet.)
После обновления пути сборки ссылок на .NET 4.5 он работал:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5
<Target Name="AfterBuild" Condition=" '$(Configuration)' == 'Release' ">
<CreateItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(Extension)'=='.dll'">
<Output ItemName="AssembliesToMerge" TaskParameter="Include" />
</CreateItem>
<PropertyGroup>
<ReferenceAssemblies>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5</ReferenceAssemblies>
</PropertyGroup>
<Message Importance="high" Text="Executing ILMerge...with target platform from $(ReferenceAssemblies)" />
<Exec Command=""$(SolutionDir)LIB\ILMerge.exe" /out:@(MainAssembly) /internalize /targetplatform:v4,"$(ReferenceAssemblies)" "@(IntermediateAssembly)" @(AssembliesToMerge->'"%(FullPath)"', ' ')" />
<Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')" />
</Target>
В большинстве случаев также будет работать путь к сборкам .NET 4, но при обращении к новым сборкам в .NET 4.5 путь должен быть обновлен.
Обратите внимание, что в примере ILMerge.exe загружается в папку в каталоге решений LIB.