我正在编写.NET应用程序,该应用程序是Autodesk Revit程序的“外接程序”。我想使用Sentry来记录和查看一般未处理的异常。 From my understanding,以下代码应捕获异常并将其发送到我的sendry.io帐户的仪表板。
using (SentrySdk.Init("<my sentry dsn string>"))
{
throw new DuplicateWaitObjectException();
}
但是,我的仪表板上没有显示DuplicateWaitObjectException。我不知道为什么上面的代码无法正常工作,尤其是因为捕获错误明确可以正常工作:
SentrySdk.Init("<my sentry dsn string>");
try
{
throw new DuplicateWaitObjectException();
}
catch (Exception err)
{
SentrySdk.CaptureException(err);
}
我怀疑这可能与我的应用程序是由Revit程序加载的加载项有关,而不是作为独立的应用程序,但我真的不确定。我相信我的代码(第一个代码块)应该可以工作吗?
[我正在考虑减轻此问题,而不是将我的代码包装在Revit入口点的try-catch块中,但这对我来说似乎很棘手,因为我不知道是什么导致了此问题。
我正在使用Windows(10)的Visual Studio 2019,并为Revit 2019进行开发。我的SentrySDK版本为v2.1.1。
感谢阅读
Revit捕获任何未处理的异常,因此库将无法看到它们。
到目前为止,将代码包装在try-catch块中的想法是最简单的解决方案。唯一的其他选择是在单独的AppDomain或进程中运行代码,并使用远程处理或gRPC之类的东西与Revit API进行通信。
我认为以上提供的代码是最佳解决方案。提供了相同的想法https://stackoverflow.com/a/54698824/6247420
[Transaction(TransactionMode.ReadOnly)]
public class MyCommand: IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementS
et elements) {
SentrySdk.Init("<my sentry dsn string>");
try
{
//do stuff
} catch (Exception exp) {
SentrySdk.CaptureException(exp);
}
}