使用某些属性/类在 Blazor Webassembly 中调试时未绑定断点

Chr*_*431 5 debugging visual-studio blazor blazor-webassembly

我正在使用 VS 2019 (16.8.4) 开发模块化 blazor 应用程序 (5.0.2),其结构如下:

  • 一个“主要”解决方案,其中包括

    • RCL
    • 启动应用程序的 Wasm 项目
  • 几个“子”解决方案引用了主要 RCL(基本组件等),其中包括

    • .net5 库(模型、Web 服务访问等)
    • 带有组件的 RCL,引用 .net5 库(通过项目引用)

所有项目都有一个构建后事件,用于将 DLL 和 PDB 文件复制到某个路径,例如 D:\TMP。SubSolution 通过此路径引用 MainRCL 库。Main Wasm 项目也通过此路径引用 SubRCL 库(用于在启动/Program.cs 时添加服务)。

MainRCL 没有对 SubRCL 的引用(根据可配置的 UI 定义,组件通过反射/BuildRenderTree() 呈现)。

调试主要解决方案工作得很好(IIS Express/应用程序调试)。然后我尝试调试 SubModules -> 我从 MainSolution 开始调试,并在这个 VS 实例中打开来自 SubModules 项目的文件。

在某些库中,调试工作正常,但不适用于 SubRCL(“未绑定断点”)。然后我能够使用示例解决方案重现(非常奇怪的)问题:

“MainRCL”提供了2个属性:

[AttributeUsage(AttributeTargets.Class)]
public sealed class TestNoEnumAttribute : Attribute
{
    public string Name { get; set; }

    public string Mode { get; set; }

    public TestNoEnumAttribute(string name, string mode)
    {
        Name = name;
        Mode = mode;
    }
}

[AttributeUsage(AttributeTargets.Class)]
public sealed class TestEnumAttribute : Attribute
{
    public string Name { get; set; }
   
    public EventExecutionMode Mode { get; set; }
  
    public TestEnumAttribute(string name, EventExecutionMode mode)
    {
        Name = name;
        Mode = mode;
    }
}

public enum EventExecutionMode
{
    AutomaticAll = 0,
    ManualConfiguration = 2
}
Run Code Online (Sandbox Code Playgroud)

SubRCL 在测试方法中使用这些属性:

[TestNoEnum("Test", "EventExecutionMode.ManualConfiguration")]
//[TestEnum("Test", EventExecutionMode.ManualConfiguration)]
public class Module1Test
{
    public int IncreaseNum(int num)
    {
        var x = new Part1();
        var part1Num = x.DoStuff(num);
        var newNum = part1Num + 1;
        return newNum;
    }
}
Run Code Online (Sandbox Code Playgroud)

被调用的类“Part1()”位于 SubSolution 的另一个库中

Part1 类中“DoStuff()”方法处的断点总是被命中(在单独的 .net5 库中)。“IncreaseNum()”方法处的断点仅在使用[TestEnum] 属性时调用。一旦使用 [TestEnum] 属性,就会出现“未绑定断点”;另一个库中的“DoStuff()”方法中的断点仍然被命中。

然后我尝试将现有项目“添加到 SubSolution”并添加 MainWasm 项目并直接从 SubSolution 开始调试 - > 相同的行为。

是否有我监督的事情(例如关于 DLL 引用或 PDB 文件复制)?

这已经是我尝试调试这些模块化结构解决方案的第二种方法 - 首先我尝试通过 IIS进行调试如何通过附加到 Chrome 在 IIS 上调试 Blazor Webassembly?),但这也没有成功。

Chr*_*431 6

发现使用带有枚举参数的属性时存在调试问题:

https://github.com/dotnet/aspnetcore/issues/25380

-> 我替换了枚举参数并且调试现在工作正常 - 到目前为止,当这个问题被修复时没有得到任何反馈

  • 谢谢,我很高兴这对其他人有帮助,我花了大约7天的时间..尝试了几种不同的方法,然后我从头开始创建了一个新的“子模块”并逐类复制源代码(我们正在迁移Silverlight应用程序) ,并检查调试器是否仍在工作 - 直到我找到原因。所以我只需将枚举更改为具有 int 常量的静态类,因此不需要太多源代码适应。恕我直言,Blazor Wasm 是已经很好用了,而且VS/调试集成越来越好——而且我相信.NET6也会把Blazor带到一个新的水平 (2认同)