Microsoft.WindowsCE.Forms的奇怪行为

时间:2009-06-16 07:42:56

标签: c# visual-studio-2008 compact-framework

我有一个Windows Mobile应用程序,我想在其中检查设备方向。 因此,我在我的一个表单中写了以下属性:

internal static Microsoft.WindowsCE.Forms.ScreenOrientation DeviceOriginalOrientation { get; private set; }

奇怪的是,每当我打开UserControl时,即使UserControl不使用该属性,设计器也会显示此警告:

无法加载文件或程序集“Microsoft.WindowsCE.Forms,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = 969db8053d3322ac”或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

注释上述属性将关闭警告并再次显示用户控件。 该应用程序已成功构建,并且在两种情况下都可以毫无问题地运行。

有人知道为什么会这样吗?我该如何解决?

3 个答案:

答案 0 :(得分:4)

这个问题花了我几个小时。我通过使用gacutil将Microsoft.WindowsCE.Forms.dll添加到GAC来解决它。希望能帮助到你。 罗宾

答案 1 :(得分:2)

是的,这是非常期待的。由于它是一个静态属性(我首先不同意),设计者必须初始化它,这意味着加载Microsoft.WindowsCE.Forms,这意味着加载特定于设备的入口点。不可否认,错误信息很糟糕,但设计人员对设备内容的支持lots of fun issues很难说明原因。

我会尝试将它移到另一个班级或用支票包裹它,看看你是否在设计师中。这样的事情对我们有用:

protected bool IsDesignTime
{
    get
    {
        // Determine if this instance is running against .NET Framework 
        // by using the MSCoreLib PublicKeyToken
        System.Reflection.Assembly mscorlibAssembly = typeof(int).Assembly;
        if ((mscorlibAssembly != null))
        {
            if (mscorlibAssembly.FullName.ToUpper().EndsWith("B77A5C561934E089"))
            {
                return true;
            }
        }
        return false;
    }
}

答案 2 :(得分:1)

例如,如果您将Microsoft.WindowsCE.Forms.dll复制到项目中的子文件夹,然后将以下内容添加到项目的预构建事件中,那么如果您这样做,它也会正常工作。重新安装你的电脑:

"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /i "$(ProjectDir)SubFolder\Microsoft.WindowsCE.Forms.dll"