C# WPF 应用程序在发布模式下失控,但不是调试模式
Posted
技术标签:
【中文标题】C# WPF 应用程序在发布模式下失控,但不是调试模式【英文标题】:C# WPF Application go haywire in Release Mode but not Debug Mode 【发布时间】:2014-02-27 09:11:57 【问题描述】:据我了解,如果没记错的话,release 模式编译时应该有更多的优化,因此体积会更小。
我正在开发一个 WPF C# 应用程序,当我选择 Release mode
时,我的应用程序出现问题,但它在 Debug mode
中运行良好。我可以知道它甚至可能吗?发生这种情况的最常见因素是什么?
更新:
当应用程序加载时,登录后的登陆页面将显示从数据库中检索到的信息。在debug mode
中时,信息会按预期显示。但在Release mode
中,信息不显示。
数据库连接没有问题,因为如果有,用户根本无法登录。
很抱歉,由于项目太大,我无法分享任何代码。我期待更多关于Release mode
和Debug mode
之间的一般理解,并找出我所面临情况的可能原因。任何帮助将不胜感激。
【问题讨论】:
也许您可以更准确地定义“乱线”? @Richard:很抱歉信息不足,请查看我更新的问题。非常感谢 一些开始诊断的地方:您是否有任何命令行参数在构建配置之间有所不同?您是否定义了在构建配置之间不同的编译符号?你使用了很多#if DEBUG
吗?不同构建配置的目标处理器架构是否不同。
【参考方案1】:
这里最大的问题是 Debug 和 Release 只是项目中特定配置的占位符。您实际上可以逐个项目更改它们的含义。
但默认情况下,差异实际上相当小。 Click for large image
这意味着您可以使用配置管理器(在解决方案资源管理器中右键单击解决方案)来获取您的 Debug 配置,并基于它创建一个新配置,然后慢慢更改这些属性,以便您可以找到问题其实是。
一个经常被误解的技巧是您仍然可以调试发布程序集(即使在优化之后)。因此,您应该能够更好地了解正在发生的事情,然后再次提出您的问题。
【讨论】:
【参考方案2】:如果你使用 MVVM Light 有两种不同的模式:
static ViewModelLocator()
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
if (ViewModelBase.IsInDesignModeStatic)
SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
else
SimpleIoc.Default.Register<IDataService, DataService>();
SimpleIoc.Default.Register<MainWindowViewModel>();
SimpleIoc.Default.Register fails at IsInDesignModeStatic if the Interface is in different assembly - 有很多问题。没有足够的数据来解决这个问题。
【讨论】:
以上是关于C# WPF 应用程序在发布模式下失控,但不是调试模式的主要内容,如果未能解决你的问题,请参考以下文章