2010-05-12 107 views
3

這是我的.csproj AfterBuild樣子:ILMerge'd程序集的運行時版本爲v4.0.20926;預期的版本是v4.0.30319

<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.exe.config在ILMerge目錄:

<?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大會?

+0

您正在使用什麼版本的ilmerge? – Will 2010-07-14 17:06:34

+0

我嘗試了更新(因爲這個問題被問到)版本於5月26日發佈,2.10.0526,但我仍然有同樣的問題。 – 2010-07-14 19:19:02

+0

這似乎是ILMerge中的一個錯誤,它生成.Net 4.0 Beta2的運行時版本。我知道這真的沒有幫助,但你可以聯繫微軟的Mike Barnett(他的電子郵件在ILMerge下載頁面) 對不起 – CriGoT 2010-07-15 19:05:57

回答

1

同樣的問題在這裏!

我正在使用ILMerge將v4與/ targetplatform:v4配合使用,並得到了相同的結果:.net運行時版本的目標版本較大.net v4版本(如反射器所述)。

帶我開始挖掘的基本問題是與基於Linq和Lambda的代碼中的(無法加載類型System.Func'2 Exception from)相關的錯誤。

如果我將合併版本替換爲非合併版本的依賴程序集,則不會引發異常。

+0

這也是我第一次注意到這個問題。 – 2010-07-21 19:25:30

5

編輯:此問題已在2011年5月2日發佈的v2.11.0502中解決,所以我刪除了我的自定義版本的下載鏈接。

我有固定ILMerge.exe(v2.10.0526),因此它設置的目標運行時版本v4.0.30319,而不是v4.0.20926。你可以從這個鏈接下載ILMerge.exe的固定版本:

(鏈接刪除,下載here正式版)

就用這個參數照常

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

和輸出運行程序集現在將以v4.0.30319爲目標。我已經檢查過Reflector,沒關係。讓我知道你的結果。

請注意,您不需要使用該ILMerge.exe.config,我想這是爲了使用.Net 4框架運行ILMerge.exe本身,但這並不意味着它會強制ILMerge.exe生成.Net 4組件。輸出組件的目標框架版本僅受/targetplatform參數的控制。

+0

嗨測試人員,謝謝!當我有機會時,我會試試這個。 – 2010-08-19 00:39:19

+0

我將鏈接的文件複製下來,並確認它確實將輸出程序集正確設置爲v4.0.30319,其中MS下載版本將其設置爲v4.0.20926。 – 2011-01-26 19:18:25

相關問題