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をターゲットにしていますが、同じ結果が得られました。

掘り始めた基本的な問題は、LinqおよびLambdaベースのコードの(Cannot load type System.Func´2 Exception from)に関連するエラーでした。

マージされたバージョンをマージされていないバージョンの依存関係アセンブリに置き換えても、例外はスローされません。

于 2010-05-14T19:54:10.630 に答える