我想将基于.NET 3.5 WinForms的应用程序迁移到最新的.NET版本(4.5).
该应用程序使用"外部"组件(可以被认为是插件),这些组件目前也是基于.NET 3.5的.
我想知道在我们只使用.NET 4.5 转换应用程序进行编译的情况下使用了什么运行时/核心库?
这种情况应该适当吗?(在4.5进程中加载.NET 3.5程序集)?*插件程序集通过反射加载.
CLR运行时如何处理这种情况?这是一种安全的做法吗?
Han*_*ant 22
如果您重新编译应用程序的主要EXE以定位.NET 4.x或使用带有该<supportedRuntime>元素的app.exe.config文件来强制使用CLR版本4,那么您将使用.NET 3.5和. NET 4.0程序集.CLR v4在读取3.5组件时没有问题,它向后兼容.不是相反,CLR v2无法读取版本4程序集,这就是为什么你需要.config文件,如果你的EXE不是针对v4.
唯一的缺点是3.5程序集对旧框架程序集的依赖关系.例如,它会询问mscorlib.dll的2.0.0.0版.CLR会自动转换这些请求,并将其替换为4.0.0.0版.一般情况下,标准的4.0框架组件与旧版本非常兼容.
然而,微软确实借此机会将4.0作为一个新的并排版本并修复了无法轻易修复的旧错误,而不会有破坏意外依赖于错误行为的代码的风险.它们是非常模糊的错误,并且这些错误修复很可能会对您产生影响.但是,您必须重新测试您的代码以确保.
Sti*_*ipo 17
所有程序集都将使用.NET Framework中的应用程序目标类型.
这是一个简单的测试:
项目' Net2Library '是一个.NET Framework 2.0类库,包含以下类:
using System;
using System.Collections.Generic;
namespace Net2Library
{
public class Class1
{
public static List<string> GetStrings()
{
var strings = new List<string>();
Console.WriteLine("From Net2Library: {0}", strings.GetType().AssemblyQualifiedName);
return strings;
}
}
}
Run Code Online (Sandbox Code Playgroud)
项目" Net4Application ",这是一个.NET Framework 4.0中控制台应用程序是引用Net2Library.dll,有下面的类:
using System;
using Net2Library;
namespace Net4Application
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("From Net4Application: {0}", Class1.GetStrings().GetType().AssemblyQualifiedName);
}
}
}
Run Code Online (Sandbox Code Playgroud)
控制台输出将是:
来自Net2Library:System.Collections.Generic.List`1 [[System.String,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]],mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089来自Net4Application:System.Collections.Generic.List`1 [[System.String,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]],mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089
您还可以查看以下资源: .NET Framework程序集统一概述和程序集绑定重定向.
如果从4.5可执行文件引用3.5程序集,则两个程序集都将在4.5的CLR环境中运行.但是,3.5程序集将针对v3.5库而不是v4.0(尽管4.0库将具有与3.5相同的所有功能,以及更多).
所以,至少根据我的经验,如果你想要针对2.0-3.5的程序集和其他目标4.0-4.5的程序集,你需要在客户端计算机上安装3.5和4.5框架版本.3.5完全向后兼容回2.0,因此你可以在一个环境中运行3.5,3.0和2.0.4.0-4.5与大多数旧代码兼容,但有一些重大变化(CAS是我最近偶然发现的一个案例),你必须明确定位4.0(或设置一个SupportedRuntime app.config键).
| 归档时间: |
|
| 查看次数: |
25541 次 |
| 最近记录: |