【问题标题】:Unable to Use BreakPoints After Trying to Add Command-Line Support尝试添加命令行支持后无法使用断点
【发布时间】:2016-09-07 11:58:26
【问题描述】:

更新 3

这实际上是由我包含的使用ILMerge 的构建后操作引起的。详情请见here

更新2

这似乎不是添加命令行支持直接导致的,但我仍然不知道是什么原因造成的。详情请见SO question

更新

进行以下更改以允许命令行支持后,我无法在所有断点上使用此消息单步执行程序:

当前不会命中断点。没有为此文档加载任何符号

我检查了this SO answer,发现我丢失了文件Microsoft.VisualStudio.Debugger.Runtime.pdb,但我不知道它去了哪里..

由于App.xaml 更新,有什么原因会发生这种情况吗?


我有一个WPF 应用程序,我需要为其实现命令行参数。

根据this SO question 的答案,我修改了App.xaml 以删除StartUpUri 属性:

<Application x:Class="WpfFileDeleter.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfFileDeleter"
             >    
    <Application.Resources>
    </Application.Resources>
</Application>

然后我向App.xaml.cs添加了一个覆盖方法:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    e.Args.Contains("MyTriggerArg")        
    {
            // Do some stuff
    }
}

但是在 OnStartUp 的顶部插入断点并在 Visual Studio 中调试应用程序后,它只是挂在 Ready 状态,但实际上不允许我单步执行程序。

我为StartUpUri 尝试了以下值:

StartUpUri = "App.xaml"
StartUpUri = "App.xaml.cs"
StartUpUri = "App.xaml.cs.OnStartUp"

但应用程序只是抛出“无法定位资源”IOException

【问题讨论】:

  • 你需要在你的OnStartup()Method... MainWindow w = new MainWindow(); w.Show(); ?!
  • @Motivated 但调试器从未真正到达该方法
  • 这可以解决你的断点问题:stackoverflow.com/a/2155997/4610605
  • @Motivated 我在那里尝试了答案,但它根本没有帮助,因为它说符号未加载的唯一模块是Microsoft.VisualStudio.Debugger.Runtime.pdb,我在任何地方都找不到这个文件!此外,我还有其他项目无法加载这些相同的符号,但它们仍然能够使用断点 ...;

标签: c# wpf xaml


【解决方案1】:

根据伦理逻辑的回答,在中定义启动参数就足够了 app_start 事件处理程序。如果你从 xaml 中删除 starupuri,你需要在 sratup 处理程序中定义其他东西而不是那个

How to start WPF based on Arguments

【讨论】:

    【解决方案2】:

    所以App.xaml 看起来像这样:

    <Application x:Class="MonitorTool.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:local="clr-namespace:MonitorTool"
                 StartupUri="Views/SplashScreen.xaml"         
                 Exit="Application_Exit">    
    </Application>
    

    在我的App.xaml.cs 我得到了这个代码:

    public partial class App : Application
    {
        private void Application_Exit(object sender, ExitEventArgs e)
        {
            //Some settings savin here...
        }        
    }
    

    当您使用 XAML 方式启动时,请确保命名空间是正确的。我将 MainWindow.xaml 放在名为 Views 的文件夹中。

    或者你像这样创建初创公司:Startup="Application_Startup"

    并在App.xaml.cs 文件中创建一个方法。再次检查命名空间以确保一切都在此处。

    由于您的应用正在构建,我想这应该可以工作,并且您至少应该使用此方法。

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        MainWindow window = new MainWindow();
        window.Show();
    }
    

    注意

    使用参数时,您不需要使用覆盖 OnStartup()只需这样做:

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        string[] args = e.Args;
        //Check for some value (for/foreach-loop) and do some stuff
    
        MainWindow w = new MainWindow();
        w.Show();
    }
    

    【讨论】:

    • 事实证明实际上还有其他问题,我根本无法单步执行代码。我所有的断点都有这个消息:The breakpoint will not currently be hit. No symbols have been loaded for this document。非常烦人,但除此之外,该应用程序似乎正在运行
    • 你是在Debug还是Release模式下运行?
    • 您可以尝试清理并重建您的项目。有时这会有所帮助!
    • 我在 Debug 模式下运行 - 尝试清理它但没有成功!
    猜你喜欢
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 2016-11-13
    • 2011-07-17
    • 2013-04-27
    相关资源
    最近更新 更多