我的应用程序代码在一个解决方案中,而Quartz.Net代码在另一个解决方案中。我的应用程序代码连接到服务并注册一个作业,但Quartz.NET解决方案中没有破坏点,尽管Quartz.Net代码的Visual Studio实例附加到服务进程。 (出于兴趣,在我的应用程序中注册作业时,我可以进入Quartz.Net源代码。它将源加载到我的应用程序的Visual Studio实例中。)
如果我将调试器从包含我的应用程序代码的Visual Studio实例附加到服务进程,那么我的自定义作业源代码中的断点就表示符号尚未加载,因此不会中断。包含自定义作业的dll不在模块列表中。
有什么想法吗?我所追求的是调试我的自定义作业,该作业在启动时由服务加载。包含我已复制到Quartz.net bin目录所在文件夹中的自定义作业的dll,因为作业实际运行,所以肯定加载好了!
干杯,伊恩。
答案 0 :(得分:0)
您是否还复制了自定义作业.pdb文件?
您也可以将构建目标更改为Quartz.Net文件夹,无需保留复制文件。
答案 1 :(得分:0)
我这样做的方法是在工作开始时有一些代码,如:
if (System.Diagnostics.Debugger.IsAttached)
System.Diagnostics.Debugger.Break();
然后我打开Visual Studio并将调试器附加到Quartz.Net服务。当作业开始时,它将进入调试器,然后我可以在其他地方添加断点。
答案 2 :(得分:0)
我要做的是创建一个Asp.Net核心控制台应用程序,并使用应用程序可执行文件使用sc
创建一个Windows服务。以下是我的Program
类。
using Backup.Service.Extensions;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
namespace Backup.Service
{
public class Program
{
static async Task Main(string[] args)
{
var isDebugging = !(Debugger.IsAttached || args.Contains("--console"));
var hostBuilder = new HostBuilder()
.ConfigureServices((context, services) =>
{
services.AddHostedService<BackupService>();
});
if (isDebugging)
{
await hostBuilder.RunTheServiceAsync();
}
else
{
await hostBuilder.RunConsoleAsync();
}
}
}
}
如果我们在本地运行应用程序/调试,我们将调用扩展方法RunConsoleAsync(),否则将调用自己的自定义扩展方法RunTheServiceAsync()。