Dot-Net
如何在 AfterBuild 中將 ILMerge 與 .NET 4.5 一起使用?
我們希望將包含多個項目的解決方案升級到 .NET 4.5。我們已經使用 Visual Studio 2012。我們使用 ILMerge 將程序集合併到單個 EXE。
我們目前用於主項目的 .csproj 文件如下所示:
<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.0</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.5?
我在這裡讀到,在 .NET 4.5 中使用 ILMerge 存在一些問題。
我找不到任何好的文件,但正如Matt Wrocks 部落格文章和關於 ILMerge 的另一個問題所建議的那樣,我首先嘗試使用與 .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 的文件夾中。