我正在使用VS 2019(16.8.4)开发一个模块化的blazor应用程序(5.0.2),其结构如下:
- “主”解决方案,包括
- 遥控器
- 用于启动应用程序的Wasm项目
- 几个“子”解决方案,参考主要RCL(基本组件等),包括
- .net5库(模型、Web服务访问等)
- 包含组件的RCL,引用.net5库(通过项目引用)
所有项目都有一个生成后事件,用于将DLL和PDB文件复制到特定路径,例如D:\TMP。SubSolution通过此路径引用MainRCL库。Main Wasm项目也通过此路径引用SubRCL库(用于在startup/Program.cs添加服务)。
MainRCL没有对SubRCL的引用(根据可配置的UI定义,通过反射/BuildRenderTree()呈现组件)。
调试主解决方案工作正常(IIS Express/应用程序调试)。然后我尝试调试子模块-〉我从主解决方案开始调试,并从该VS示例中的子模块项目打开文件。
在一些库中,调试工作正常,但对于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;
}
}
被调用的类“Part1()”位于子解决方案的另一个库中
Part1类中“DoStuff()”方法处的断点始终被命中(在单独的.net5库中)。“IncreaseNum()”方法处的断点仅在NOT使用[TestEnum]属性时被调用。一旦使用[TestEnum]属性,就有一个“未绑定断点”;另一个库中“DoStuff()”方法中的断点仍被命中。
然后,我尝试“添加现有项目”到SubSolution,并添加了MainWasm项目,然后直接从SubSolution -〉相同行为开始调试。
是否有我监督的事项(例如,关于DLL引用或PDB文件副本)?
这已经是我尝试调试这些模块化结构解决方案的第二种方法--第一次我尝试通过IIS(How to debug Blazor Webassembly on IIS with VS by attaching to Chrome?)进行调试,但也没有成功。
3条答案
按热度按时间lztngnrs1#
发现在使用带有枚举参数的属性时存在调试问题:
https://github.com/dotnet/aspnetcore/issues/25380
ilmyapht2#
我的Blazor WASM也遇到了同样的问题,由于“未绑定断点”而无法在VS中调试。我有多个项目在同一个解决方案下运行,虽然最初对WASM的调试工作正常,但过了一段时间就停止了。
最后,我找到了一个解决办法,等到所有的项目都加载了,然后我可以禁用“未绑定”断点并重新选择它。
这不是一个理想的解决方案(特别是在故障排除时有多个断点的情况下),但它是可行的。
mwngjboj3#
我在.NET 6和Visual Studio 2022中遇到过这个问题。
我创建了一个代码隐藏文件component.razor.cs,但我在razor-file本身也有代码。将代码移到代码隐藏文件解决了这个问题,并启用了断点。