使用WinForms创建支持dpi的C#clickonce应用程序

使用WinForms创建支持dpi的C#clickonce应用程序,c#,winforms,clickonce,dpi,C#,Winforms,Clickonce,Dpi,在我们的C#clickonce应用程序中,我们希望获得用户的屏幕大小(宽度、高度)。起初,一切都很顺利 int width = Screen.FromControl(this).Bounds.Width; int height= Screen.FromControl(this).Bounds.Height; 后来我注意到,在我们的Windows8.1笔记本电脑上,返回的值比屏幕的实际尺寸小1.25倍。就在那时,我注意到我们在高分辨率屏幕上的某些Windows版本存在DPI问题 我知道转向WPF

在我们的C#clickonce应用程序中,我们希望获得用户的屏幕大小(宽度、高度)。起初,一切都很顺利

int width = Screen.FromControl(this).Bounds.Width;
int height= Screen.FromControl(this).Bounds.Height;
后来我注意到,在我们的Windows8.1笔记本电脑上,返回的值比屏幕的实际尺寸小1.25倍。就在那时,我注意到我们在高分辨率屏幕上的某些Windows版本存在DPI问题

我知道转向WPF将是一个不错的选择,但我们需要一个快速而肮脏的解决方案。在谷歌搜索之后,我找到了几种方法,我决定采用这种解决方案。毕竟,即使是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>
奇怪的是,stackoverflow.com上的其他人建议取消选中应用程序设置中的
启用clickonce安全设置。这使得应用程序再次启动,并在我的笔记本电脑上正常工作:应用程序升级,文本清晰。而且,我能够通过我的代码获得正确的屏幕大小(以像素为单位)

当然,如果要部署应用程序,禁用安全设置不是一个选项。那么我如何解决这个问题才能得到我想要的?我错过了什么?在这一点上我完全迷路了


尝试重新开始:

  • 开放式Visual Studio(2013 Pro)
  • 名为“测试”的新Windows窗体应用程序
  • 已启用“ClickOnce安全设置”
  • 按照其他帖子的建议再次编辑清单文件,如
  • 单击开始(或构建)
出现以下错误。我不知道如何获得更多关于错误的信息,因为没有


也许现在回答问题已经太迟了,但是根据

项目选项>调试>启用Visual Studio宿主进程(禁用它运行应用程序稍后再次启用它)


看来您正确地声明了清单。所以你只剩下一个例外。但是您没有提供完整的代码示例,也没有提供有关异常的完整信息。请显示异常的完整堆栈跟踪,并提供。@PeterDuniho没有完整的堆栈跟踪,或者至少我找不到它。但是我添加了一些信息,我甚至可以通过启动一个新的示例项目而不进行任何编辑来重现这个问题。
<?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>
An unhandled exception of type 'System.ArgumentNullException' occurred in mscorlib.dll.
Additional information: Value cannot be null.