在我们的C#clickonce应用程序中,我们希望获得用户的屏幕大小(宽度,高度)。
起初一切正常int width = Screen.FromControl(this).Bounds.Width;
int height= Screen.FromControl(this).Bounds.Height;
后来我发现在我们的Windows 8.1笔记本电脑上,返回的值比屏幕的实际尺寸小1.25倍。那时我注意到我们在高分辨率屏幕上遇到某些Windows版本的DPI问题。
我知道继续使用WPF将是一个不错的选择,但我们需要快速而肮脏的修复。在通过Google搜索后,我找到了here所述的几种方法,我决定采用这种解决方案。毕竟,即使MSDN博客条目建议将以下代码段添加到app.manifest:
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
不幸的是,我不明白如何以及在何处添加此代码。我的清单(由Visual Studio自动生成)如下所示:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
</application>
</compatibility>
</asmv1:assembly>
请注意,我删除了已注释的部分,以使应用清单看起来更小。我尝试在最后一行</asm1:assembly>
之前添加上面的代码段。每当我尝试这个时,我的应用程序开始之前就会出现异常:
An unhandled exception of type 'System.ArgumentNullException' occurred in mscorlib.dll.
Additional information: Value cannot be null.
奇怪的是,stackoverflow.com上的其他人建议在应用设置中取消选中Enable clickonce security settings
。这使得应用程序重新开始,它按照预期在我的笔记本电脑上工作:应用程序已升级,文本清晰。此外,通过我的代码,我能够以像素为单位获得正确的屏幕大小。
当然,如果要部署应用程序,则无法禁用安全设置。那么如何解决这个问题才能得到我想要的东西?我错过了什么?我完全迷失了。
尝试重新开始:
出现以下错误。我不知道如何获得有关错误的更多信息,因为没有错误......
答案 0 :(得分:-1)
回答可能为时已晚,但根据the same problem
的回答项目选项&gt;调试&gt;启用Visual Studio托管过程(稍后禁用它运行应用程序再次启用它)