2011-06-15 26 views

回答

1

當然,你可以,這個問題應該幫助你前進的道路:

Loading .net 3.5 wpf-forms in a .net 2.0 application

或者代碼:

Dim dllPath As String = "C:\ProjectsTest\TestSolution\ActiveXUser\bin\Debug\TestControl.dll" 
If Not File.Exists(dllPath) Then 
    Return 
End If 

Dim loadedAssembly As [Assembly] = [Assembly].LoadFile(dllPath) 

Dim mytypes As Type() = loadedAssembly.GetTypes() 

Dim t As Type = mytypes(1) 
Dim obj As [Object] = Activator.CreateInstance(t) 

TestControl.dll可以包含所有已安裝的.NET版本信息。

+0

以及如何從該對象調用任意方法(例如靜態方法)? – macropas 2011-06-15 10:13:30

+0

通過反射或共享接口。 – CodingBarfield 2011-06-15 10:46:50

2

程序集沒有.NET版本,它有一個元數據版本。忽略早期的人,野外有三種不同的人。分別使用.NET 1.1,.NET 2.0和.NET 4發佈的版本。中間版本(2.0和3.5 SP1之間的任何內容)使用版本2.0元數據格式。或者換句話說,CLR版本纔是真正重要的東西。這就是爲什麼@ Barfieldmv的代碼可以工作,.NET 2.0和.NET 3.5使用相同的CLR版本。在今天更爲典型的問題上,氣體用完了,CLR版本2無法加載具有版本4元數據的程序集。您需要必須與版本4 CLR一起運行程序。這需要一個覆蓋將要使用的CLR版本的app.exe.config文件。它應該看起來像這樣:

<configuration> 
    <startup> 
     <supportedRuntime version="v4.0"/> 
    </startup> 
</configuration> 
+0

很好的答案!但是,你能否提示我,是否可以使用某些腳本引擎從.Net 2.0/3.5程序集調用.Net 4程序集? – macropas 2011-06-15 11:08:18

+0

不,程序中只能有一個版本的CLR。版本4 CLR對這個限制有一些解決方法,但是如果你已經加載了CLR,那麼你就不會有這個問題。 – 2011-06-15 11:17:39

相關問題