使用某些 attributes/classes 在 Blazor Webassembly 中调试时未绑定断点
Unbound breakpoints when debugging in Blazor Webassembly when using certain attributes/classes
我正在使用 VS 2019 (16.8.4) 开发模块化 blazor 应用程序 (5.0.2),其结构如下:
一个“主要”解决方案,包括
- RCL
- 用于启动应用程序的 Wasm 项目
几个引用主要 RCL(基础组件等)的“子”解决方案,其中包括
- .net5 库(模型、Web 服务访问等)
- 带有组件的 RCL,引用 .net5 库(通过项目引用)
所有项目都有一个 post-build 事件来将 DLL 和 PDB 文件复制到特定路径,例如D:\TMP。
SubSolution 通过此路径引用 MainRCL 库。
Main Wasm 项目也通过此路径引用 SubRCL 库(用于在 startup/Program.cs 添加服务)。
MainRCL 没有对 SubRCL 的引用(组件根据可配置的 UI 定义通过 reflection/BuildRenderTree() 呈现)。
调试主要解决方案非常有效(IIS Express/Application 调试)。
然后我尝试调试 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
}
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;
}
}
调用的class“Part1()”位于SubSolution的另一个库
第 1 部分 class 中“DoStuff()”方法处的断点始终命中(在单独的 .net5 库中)。
“IncreaseNum()”方法处的断点仅在 [TestEnum] 属性为 NOT 时调用。
一旦使用 [TestEnum] 属性,就会出现“Unbound Breapoint”;另一个库中“DoStuff()”方法中的断点仍然命中。
然后我尝试将现有项目“添加”到 SubSolution 并添加 MainWasm 项目并直接从 SubSolution 开始调试 -> 相同的行为。
有没有我监督的事情(例如关于 DLL 引用或 PDB 文件复制)?
这已经是我尝试调试这些模块化结构解决方案的第二种方法 - 首先我尝试通过 IIS () 进行调试,但这也没有成功。
发现使用带有枚举参数的属性时存在调试问题:
https://github.com/dotnet/aspnetcore/issues/25380
-> 我替换了枚举参数,现在调试工作正常 - 到目前为止没有得到任何反馈
由于 'Unbound breakpoint',我的 Blazor WASM 也遇到了同样的问题,无法在 VS 中进行调试。我在同一个解决方案下有多个项目 运行,虽然最初调试适用于 WASM,但一段时间后它停止了。
最终我找到了解决方法,方法是等到所有项目都加载完毕,然后我可以禁用 'Unbound' 断点并重新 select 它。然后它按预期工作。
这不是一个理想的解决方案(特别是如果您在故障排除时有多个断点)但它是可行的。
我正在使用 VS 2019 (16.8.4) 开发模块化 blazor 应用程序 (5.0.2),其结构如下:
一个“主要”解决方案,包括
- RCL
- 用于启动应用程序的 Wasm 项目
几个引用主要 RCL(基础组件等)的“子”解决方案,其中包括
- .net5 库(模型、Web 服务访问等)
- 带有组件的 RCL,引用 .net5 库(通过项目引用)
所有项目都有一个 post-build 事件来将 DLL 和 PDB 文件复制到特定路径,例如D:\TMP。 SubSolution 通过此路径引用 MainRCL 库。 Main Wasm 项目也通过此路径引用 SubRCL 库(用于在 startup/Program.cs 添加服务)。
MainRCL 没有对 SubRCL 的引用(组件根据可配置的 UI 定义通过 reflection/BuildRenderTree() 呈现)。
调试主要解决方案非常有效(IIS Express/Application 调试)。 然后我尝试调试 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
}
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;
}
}
调用的class“Part1()”位于SubSolution的另一个库
第 1 部分 class 中“DoStuff()”方法处的断点始终命中(在单独的 .net5 库中)。 “IncreaseNum()”方法处的断点仅在 [TestEnum] 属性为 NOT 时调用。 一旦使用 [TestEnum] 属性,就会出现“Unbound Breapoint”;另一个库中“DoStuff()”方法中的断点仍然命中。
然后我尝试将现有项目“添加”到 SubSolution 并添加 MainWasm 项目并直接从 SubSolution 开始调试 -> 相同的行为。
有没有我监督的事情(例如关于 DLL 引用或 PDB 文件复制)?
这已经是我尝试调试这些模块化结构解决方案的第二种方法 - 首先我尝试通过 IIS (
发现使用带有枚举参数的属性时存在调试问题:
https://github.com/dotnet/aspnetcore/issues/25380
-> 我替换了枚举参数,现在调试工作正常 - 到目前为止没有得到任何反馈
由于 'Unbound breakpoint',我的 Blazor WASM 也遇到了同样的问题,无法在 VS 中进行调试。我在同一个解决方案下有多个项目 运行,虽然最初调试适用于 WASM,但一段时间后它停止了。
最终我找到了解决方法,方法是等到所有项目都加载完毕,然后我可以禁用 'Unbound' 断点并重新 select 它。然后它按预期工作。
这不是一个理想的解决方案(特别是如果您在故障排除时有多个断点)但它是可行的。