gpt4 book ai didi

.net - 如何在 AfterBuild 中将 ILMerge 与 .NET 4.5 结合使用?

转载 作者:行者123 更新时间:2023-12-01 19:37:52 27 4
gpt4 key购买 nike

我们希望将包含多个项目的解决方案升级到 .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="&quot;$(SolutionDir)LIB\ILMerge.exe&quot; /out:@(MainAssembly) /internalize /targetplatform:v4,&quot;$(ReferenceAssemblies)&quot; &quot;@(IntermediateAssembly)&quot; @(AssembliesToMerge->'&quot;%(FullPath)&quot;', ' ')" />
<Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')" />
</Target>

.NET 4.5 应该如何看待?

我已阅读 here在 .NET 4.5 中使用 ILMerge 会出现一些问题。

最佳答案

我找不到任何关于此的好的文档,但正如 Matt Wrocks blog post 所建议的那样和 another question about 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="&quot;$(SolutionDir)LIB\ILMerge.exe&quot; /out:@(MainAssembly) /internalize /targetplatform:v4,&quot;$(ReferenceAssemblies)&quot; &quot;@(IntermediateAssembly)&quot; @(AssembliesToMerge->'&quot;%(FullPath)&quot;', ' ')" />
<Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')" />
</Target>

在大多数情况下,.NET 4 程序集的路径也可以使用,但在 .NET 4.5 中引用新程序集时,需要更新该路径。

请注意,在示例中,ILMerge.exe 被下载到解决方案目录中名为 LIB 的文件夹中。

关于.net - 如何在 AfterBuild 中将 ILMerge 与 .NET 4.5 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14139207/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com