2010-02-21 65 views

回答

1

這是EXE文件,它決定進程將使用哪個.NET運行時版本。爲早期版本的.NET編譯的任何程序集都必須使用「進程版本」。這通常是很有用的,因爲.NET幾乎沒有什麼重大變化。

使用.NET 1.1 DLL的.NET 3.5應用程序將在CLR 2.0上運行該DLL(.NET 2.0,3.0和3.5都使用相同的CLR 2.0版本)。

.NET 4有一個新的CLR和.NET程序4的新功能之一是in-process side by side CLR hosting允許multipe版本of.NET在同一進程,並可能改變答案..

1

不。如果你的目標是3.5版本的框架,它不會神奇地使用2.0,如果3.5不存在。

但是你可以使用assemblybindingbindingredirectapp.exe.config指定替換版本:

<configuration> 

    .... 

    <runtime> 
    <assemblybinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentassembly> 
     <assemblyidentity name="System" culture="neutral" publickeytoken="969db8053d3322ac" /> 
     <bindingredirect newVersion="2.0.0.0" oldVersion="1.0.5000.0" /> 
     </dependentassembly> 
     <dependentassembly> 
     <assemblyidentity name="System.Windows.Forms" culture="neutral" publickeytoken="969db8053d3322ac" /> 
     <bindingredirect newVersion="2.0.0.0" oldVersion="1.0.5000.0" /> 
     </dependentassembly>  
    </assemblybinding> 
    </runtime> 

</configuration> 

Redirecting Assembly Versions

+0

米奇。你的回答不清楚。你是說DLL WONT使用父級運行時?如果不是,是否加載了2個CLR? – bobbyalex 2010-02-21 10:27:05

+0

@Bobby Alexander:你能否澄清你的問題。 – 2010-02-21 10:33:33

+0

Mitch,我想知道的是:如果一個exe是爲framework 3.5構建的,但它使用的DLL(引用)是建立在.net 1.1上的,那麼這個dll會自動運行在2.0 CLR上(與父代相同)? – bobbyalex 2010-02-22 05:51:37

0

如果應用程序使用的框架3.5(這是真正CLR 2),它加載編譯的DLL對於CLR 1.0或CLR 1.1,那麼這些DLL將自動使用CLR 2. 你不能走另一條路 - 即。您無法將CLR 2 DLL加載到CLR 1進程中,而不會受到任何傷害。

在CLR 4中,這些規則會有所改變,因爲您現在可以在給定進程中擁有多個CLR實例,但這只是在您通過COM實例化對象時才相關,而不是通過正常反射進行加載。

相關問題