3

这就是我的 .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>

我正在运行 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>

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

4

2 回答 2

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

并且输出程序集现在将针对 v4.0.30319。我用反射器检查过,没关系。让我知道你的结果。

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

于 2010-08-13T11:23:59.993 回答
1

同样的问题在这里!!

我使用 ILMerge 来定位带有和不带有 /targetplatform:v4 的 v4 并得到相同的结果:.net 运行时版本定位具有更大的 .net v4 修订版(如反射器所述)。

我开始挖掘的基本问题是与基于 Linq 和 Lambda 的代码中的(Cannot load type System.Func´2 Exception from )相关的错误。

如果我用依赖程序集的非合并版本替换合并版本,则不会引发异常。

于 2010-05-14T19:54:10.630 回答