在一个.NET 4.0 - > .NET 4.5的应用程序迁移过程中我发现了一个非常奇怪的现象。 我已经能够跟踪这个问题到这个简短的代码片段:
class Program
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int GetSystemMetrics(int nIndex);
static void Main(string[] args)
{
const int CXFRAME = 0x20;
const int CYFRAME = 0x21;
var dx = GetSystemMetrics(CXFRAME);
var dy = GetSystemMetrics(CYFRAME);
Console.WriteLine("{0}x{1}", dx, dy);
Console.ReadKey();
}
}
当编译Target Framework = 4.0
(以及2.0,3.0,3.5),其输出8x8
当编译Target Framework = 4.5
时,输出4x4
运行此样品与MSVS2012调试器还总是输出4x4
与任何目标框架)。
其他选项(目标框架型材,目标平台,启用/禁用航空)不影响结果,改变输出的唯一的东西是目标框架,并与调试器中运行。 我已经能够重现上3台电脑这个问题,遗憾的是他们在安装软件方面几乎相同:
- Windows 7的SP1 Ultmate(俄罗斯,所有更新安装)与MSVS2012(英语/ rusian)更新1
- Windows 8的(虚拟机)
目前我正在考虑修补一些.NET类( SystemParameters
为例),其调用GetSystemMetrics()
使用反射,但我不知道怎么去正确的度量值。
问题:
- 我缺少的东西吗? 如何
GetSystemMetrics()
可以通过目标框架的影响? - 有没有什么办法来调用
GetSystemMetrics()
从.NET 4.5的应用程序,并得到正确的结果?
我愿意就解决这个问题的任何建议。 另外,如果您不能重现该问题,请留下评论在很短的系统描述。