【发布时间】:2011-06-15 09:19:30
【问题描述】:
我可以从较低 .Net 版本的程序集中动态调用较高 .Net 版本的程序集吗?也许我应该使用嵌入式 DLR 语言(Iron Python)?
【问题讨论】:
标签: c# .net dynamic-language-runtime
我可以从较低 .Net 版本的程序集中动态调用较高 .Net 版本的程序集吗?也许我应该使用嵌入式 DLR 语言(Iron Python)?
【问题讨论】:
标签: c# .net dynamic-language-runtime
程序集没有 .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>
【讨论】:
当然可以,这个问题应该对你有所帮助:
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 版本信息。
【讨论】: