实际上,进一步研究发现由于Microsoft在设计.NET Framework时考虑到向下兼容的问题,提供一个通用的方法——配置文件。任何程序集都可以通过配置文件来改变其运行时所采用的CLR版本,就是说1.0可以在1.1下,1.0和1.1可以运行在2.0下。
配置文件如下:
<?
xml version="1.0" encoding="utf-8"
?>
< configuration >
< startup >
< supportedRuntime version ="v2.0.40607" />
< requiredRuntime version ="v2.0.40607" />
</ startup >
< runtime >
< assemblyBinding xmlns ="urn:schemas-microsoft-com:asm.v1" >
< probing privatePath ="bin" />
</ assemblyBinding >
</ runtime >
</ configuration >
< configuration >
< startup >
< supportedRuntime version ="v2.0.40607" />
< requiredRuntime version ="v2.0.40607" />
</ startup >
< runtime >
< assemblyBinding xmlns ="urn:schemas-microsoft-com:asm.v1" >
< probing privatePath ="bin" />
</ assemblyBinding >
</ runtime >
</ configuration >
但是反过来是不是就不一定行了呢?用以下代码测试,结果是——向下兼容,向上不兼容。
using
System;
public class Test
{
public static void Main()
{
Console.WriteLine(Environment.Version);
Console.ReadLine();
}
}
public class Test
{
public static void Main()
{
Console.WriteLine(Environment.Version);
Console.ReadLine();
}
}
有趣的是,如用V2.0编译的程序指定运行在v1.1下,会报下面的异常
System.BadImageFormatException
见ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemBadImageFormatExceptionClassTopic.htm
这难道说V2.0编译的执行文件的格式都不一样了?