我有一个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)
注释上述属性将关闭警告并再次显示用户控件。 该应用程序已成功构建,并且在两种情况下都可以毫无问题地运行。
有人知道为什么会这样吗?我该如何解决?
答案 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"