C# 如何与两个DLL共享取消令牌?

C# 如何与两个DLL共享取消令牌?,c#,ilmerge,cancellation,cancellationtokensource,cancellation-token,C#,Ilmerge,Cancellation,Cancellationtokensource,Cancellation Token,我在第一个dll中有以下代码: 方法类classA位于第二个dll中: 然后,在控制台应用程序中调用我的方法FuncAsync: CancellationTokenSource cancelSource = new CancellationTokenSource(); CancellationToken ct = cancelSource.Token; Task task = B.SaveAsync("", "", ct); 第一个DLL包含第二个DLL,控制台应用程序包含第一个DLL 这段代

我在第一个dll中有以下代码:

方法类classA位于第二个dll中:

然后,在控制台应用程序中调用我的方法FuncAsync:

CancellationTokenSource cancelSource = new CancellationTokenSource();
CancellationToken ct = cancelSource.Token;
Task task = B.SaveAsync("", "", ct);
第一个DLL包含第二个DLL,控制台应用程序包含第一个DLL

这段代码编译得很好,没有警告,没有错误。但在执行时,行上出现错误:Savea、b、ct

其他信息:无法从程序集“A.B.C,版本=1.0.0.0,区域性=中性,PublicKeyToken=null”加载类型“ProgressHandler”,因为方法“func”没有实现没有RVA

如果我从代码中删除CancellationToken,一切正常

如何将我的CancellationToken从应用程序发送到DLL1,然后从DLL1发送到DLL2

编辑:

我忘了使用以下命令将两个DLL合并为一个:

ILMerge /target:libray dll1Temp.dll  dll2.dll  /out:dll1.dll  /internalize /allowDup /lib:C:\Windows\Microsoft.NET\Framework64\v4.0.30319
del dll1Temp.dll
del dll2.dll

当我不合并库时,我的代码中没有错误。

除了用于正确的dlliport p/invoke之外,您确定代码中的任何地方都没有使用“extern”关键字。这听起来很奇怪。是否动态加载第二个DLL并动态实例化classA?然后:您确定正在加载的版本实现了带有取消令牌参数的方法吗?是否有这些asp.net网站,而不是asp.net web应用程序?我的错,我在第二个DLL中使用了extern关键字。方法func调用[DllImportkernel32.dll,SetLastError=true]中的一些方法受保护的静态外部安全文件句柄CreateFile…@ThorstenDittmar:第二个dll在我的第一个dll中引用。加载的版本正确实现了取消令牌参数。
CancellationTokenSource cancelSource = new CancellationTokenSource();
CancellationToken ct = cancelSource.Token;
Task task = B.SaveAsync("", "", ct);
ILMerge /target:libray dll1Temp.dll  dll2.dll  /out:dll1.dll  /internalize /allowDup /lib:C:\Windows\Microsoft.NET\Framework64\v4.0.30319
del dll1Temp.dll
del dll2.dll