ILMerge'd程序集的运行时版本是v4.0.20926; 预期版本是v4.0.30319

xof*_*ofz 3 .net ilmerge

这就是我的.csproj AfterBuild的样子:

  <Target Name="AfterBuild" Condition=" '$(Configuration)' == 'Release'">
    <Exec Command="&quot;..\Tools\ILMerge\ILMerge.exe&quot; /internalize /ndebug /out:@(MainAssembly) /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 &quot;@(IntermediateAssembly)&quot; @(ReferenceCopyLocalPaths->'&quot;%(FullPath)&quot;', ' ')" Condition=" '$(TargetFrameworkVersion)' == 'v4.0'" />
  </Target>
Run Code Online (Sandbox Code Playgroud)

我正在运行64位Windows.我尝试过更改.NET Framework ...\Microsoft.NET\Framework\...,...\Microsoft.NET\Framework64\...但它没有帮助.

我还在ILMerge目录中创建了ILMerge.exe.config:

<?xml version ="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <requiredRuntime safemode="true" imageVersion="v4.0.30319" version="v4.0.30319"/>
    </startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)

为什么ILMerge不能生成4.0.30319程序集?

gtd*_*dev 5

编辑:此问题已于2011年5月2日发布的v2.11.0502中修复,因此我删除了自定义版本的下载链接.

我修复了ILMerge.exe(v2.10.0526),以便它设置目标运行时版本v4.0.30319而不是v4.0.20926.您可以从以下链接下载ILMerge.exe的固定版本:

(链接已删除,请在此处下载正式版)

像往常一样使用此参数运行它

/targetplatform:v4,c:\Windows\Microsoft.NET\Framework\v4.0.30319
Run Code Online (Sandbox Code Playgroud)

输出程序集现在将以v4.0.30319为目标.我已经用Reflector检查过了,没关系.让我知道你的结果.

请注意,您不需要使用ILMerge.exe.config,我想它是用于运行带有.Net 4框架的ILMerge.exe本身,但这并不意味着它会强制ILMerge.exe生成.Net 4程序集.输出程序集的目标框架版本仅使用/ targetplatform参数控制.