有谁知道是否可以“Bin部署”Async CTP?
由于Async的很大一部分基本上是编译技巧,我认为预编译我的应用程序并将其部署到没有安装Async CTP的服务器可能会有效。不幸的是,它似乎并不那么简单。我尝试调用异步方法时收到以下错误消息:
Task<Result> task = _checker.CheckAsync(input);
'System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1'的类型初始值设定项引发了异常。
这实际上并不是我期望的错误类型,但也许有一些替换程序集可以部署到我的Bin目录来解决这个问题?我无法在此(生产)计算机上安装Async CTP。
更新: 我也包含了InnerException细节:
System.MethodAccessException:Attempt 通过安全透明的方法 'System.Runtime.CompilerServices.AsyncTaskMethodBuilder
1<TResult>..cctor()' to access security critical method 'System.Threading.Tasks.TaskScheduler.add_UnobservedTaskException(System.EventHandler
1)' 失败。 在System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1..cctor()
这似乎是一个中等信任问题,而不是异步问题?
答案 0 :(得分:2)
您还需要部署AsyncCtpLibrary.dll。我希望期待这就是所有需要的......你已经将它与你的应用程序一起部署了吗?
TypeInitializerException
的内部例外是什么?
要验证是否是这种情况,您可以尝试在代码中的某处添加UnobservedTaskException
处理程序:
TaskScheduler.UnobservedTaskException += (sender, e) => e.SetObserved();
在一个完全不使用异步的小项目中这样做 - 我怀疑它会以同样的方式失败。如果您可以调整安全设置以使其有效,那么其余部分可能只适用于此。