我在一个名为Autodesk Revit的设计程序中运行一个自定义插件,最近我实现了JavaScript使用报告,但这一更改导致我的调用程序集发生更改.

在此更改之前,我同步记录了使用情况,但那是暂时冻结了用户界面.对Async的更改运行良好,但调用程序集似乎已更改.我这么说的原因是因为我记录了程序集版本作为使用情况报告的一部分,所以我知道用户安装了哪个版本的插件,但现在调用程序集更改为mscorlib,它显示了此Microsoft程序集的版本.

我try 了调用程序集、执行程序集和入口程序集,但都没有指向调用该方法的插件.有什么主意吗?

Version assemblyVersion = Assembly.GetCallingAssembly().GetName().Version;

UPDATE

感谢大家的 comments 和建议.通过同步获取插件版本并将其作为字符串参数传递给Async方法,我设法绕过了这个问题.

推荐答案

这可能是因为异步是如何工作的.

异步方法将被分成不同的部分,这些部分可以在不同的时间执行,因此是"异步"的.但这意味着除了第一部分之外,你将失go 所有的调用堆栈.这样做的结果是需要使用任务来返回东西."task"和"await"实际上允许你pretend方法正常运行,而在后台做一些完全不同的事情.

如果您直接判断调用堆栈,这种错觉将被打破.您只会看到您的方法是从线程池中调用的,根本不知道是什么原因导致了调用.这很可能是调用程序集不同的原因.

有几种可能的解决方案:

  1. 在执行任何异步操作之前收集所有必需的数据.(如果收集数据需要时间,这将不会有帮助)
  2. 切换到用于收集数据的Caller*个属性,如[调用文件路径].这不会做完全相同的事情,但可能会实现相同的目的,并且基本上是免费的.

Csharp相关问答推荐

如何使嵌套for-loop更高效?

在命令行中使用时安装,但在单击时不会安装

只有第一个LINQ.Count()语句有效

在命名管道上使用GRPC ASP.NET核心时如何配置命名管道权限

如何在WPF的树视图中显示一个对象的两个或多个属性,其中只有一个是分层项?

C#阻塞调用或await calling inside calling方法

在.NET 8最低API中从表单绑定中排除属性

HttpClient SendAsync与多线程环境中的ArchiveZip

泛型参数在.NET 8 AOT中没有匹配的批注

如何在.NET Maui中将事件与MVVM一起使用?

如何返回具有泛型的类?

{ or ; expected error如何解决此问题

错误:此版本的Visual Studio无法打开以下项目

如何在单击按钮后多次异步更新标签

将两个for循环更改为一条LINQ语句

使用ITfoxtec.Identity.Saml2解析相同键多值SAML 2声明

在Swagger中显示自定义属性的属性名称

在c#中,使用Okta和Blazor时,LocalReDirect()陷入循环,出现错误&请求太多.

C#If条件格式

能否将我图表中的星号与X轴上一天中的第二位数字对齐?