0

我正在开发一个小型 wpf 应用程序,其中一个用户遇到以下异常:

System.MethodAccessException: 
Attempt by method "xxx.HttpConfirmation.Invoke()" to access method "System.Threading.Tasks.Task.get_CompletedTask()" failed.
at xxx.HttpConfirmation.Invoke()
at xxx.RequestPipeline.<ProcessQueuedRequests>d__11.MoveNext()

根据 MSDN 文档,在以下情况下会引发此类异常:

  • 通过使用反射从部分受信任的代码访问无法从正常编译代码访问的私有、受保护或内部方法。
  • 从透明代码访问安全关键方法。
  • 类库中方法的访问级别已更改,并且引用该库的一个或多个程序集尚未重新编译。

Task.get_CompletedTask() 自推出以来是公开的,我也没有使用反射来访问该属性。

我也不认为代码安全/透明度存在问题,因为只有一个用户遇到此问题。

Task.CompletedTask行抛出异常:

public class HttpConfirmation
{
    public static Task Invoke()
    {
        using (var client = new WebClient())
        {
            try
            {
                // Send the request and don't wait for the response.
                client.UploadStringTaskAsync("http://sampleUrl.com", string.Empty);
            }
            catch
            {
                // ignore
            }
        }

        return Task.CompletedTask;
    }
}

关于可能导致异常的任何想法?

4

1 回答 1

1

问题是客户安装了 .NET 4.5.2 并且程序以 .NET 4.6 为目标。尽管我仍然不知道为什么System.MethodAccessException会抛出这个异常,因为在记录的 3 种抛出此异常的情况中没有一个确实发生过。

于 2018-02-01T10:54:51.040 回答