代码之家  ›  专栏  ›  技术社区  ›  xofz

ilmerge的程序集的运行时版本为v4.0.20926;预期版本为v4.0.30319

  •  3
  • xofz  · 技术社区  · 16 年前

    这就是我的.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位窗口。我已尝试将.NET框架从 ...\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程序集?

    2 回复  |  直到 16 年前
        1
  •  5
  •   gtdev    14 年前

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

    我已经修复了ilmerge.exe(v2.10.0526),以便它设置目标运行时版本 版本4.0.30319 而不是 版本4.0.20926 是的。您可以从以下链接下载固定版本的ilmerge.exe:

    (删除链接,下载官方版本 here )

    像往常一样用这个参数运行它

    /targetplatform:v4,c:\Windows\Microsoft.NET\Framework\v4.0.30319
    

    输出程序集现在将以v4.0.30319为目标。我用反光镜检查过了,没问题。告诉我你的结果。

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

        2
  •  1
  •   gonzalo.vinas    16 年前

    同样的问题!啊!

    我正在使用ilmerge将目标v4与/targetplatform:v4一起使用,得到了相同的结果:.net运行时版本目标具有更高的.netv4修订版(如reflector所述)。

    我开始挖掘的基本问题是在基于LINQ和lambda的代码中出现了一个与(无法从中加载System.Func2类型异常)相关的错误。

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

    推荐文章