Это решение Xamarin, и я получаю ошибку, найденную в заголовке этого сообщения. Конечно, я могу легко подтвердить, что в проекте PCL есть свойство Proxy на HttpClientHandler. И решение строится без ошибок. Только когда я запускаю, он вызывает эту ошибку (на Droid или iOS) и делает это в той точке, где он вызывает метод в PCL, который создает экземпляр HttpClient. Обратите внимание, что он даже не доходит до этого метода. Ошибка появляется при запуске приложения; например, UIApplication.Main()System.MissingMethodException Method 'System.Net.Http.HttpClientHandler.set_Proxy' не найден
Если я прокомментирую обработчик и создаю экземпляр HttpClient без обработчика, он отлично работает, пока я нахожусь в открытом интернете. Но я пытаюсь заставить это работать из-за прокси.
Дальнейшие исследования показали, что в проектах устройств не было ссылок на System.Net.Http. Поэтому я добавил их - и это указывает на Xamarin.iOS и Xamarin.Android как на пакеты, но он все равно выдает ошибку.
Я не понимаю, что говорит об ошибке, но я считаю, что это означает, что проект устройства не может видеть System.Net.Http.HttpClientHandler?
private HttpClient GetHttpClient()
{
WebProxy proxy = new WebProxy(ProxyConfig.Url)
{
Credentials = new NetworkCredential(ProxyConfig.Username, ProxyConfig.Password)
};
// At runtime, when GetHttpClient is invoked, it says it cannot find the Proxy setter
HttpClientHandler handler = new HttpClientHandler
{
Proxy = proxy,
UseProxy = true,
PreAuthenticate = true,
UseDefaultCredentials = false,
};
HttpClient client = new HttpClient(handler);
// This works when not behind a proxy
//HttpClient client = new HttpClient();
return client;
}
public async Task GetWeatherAsync(double longitude, double latitude, string username)
{
// MissingMethodException is thrown at this point
var client = GetHttpClient();
client.BaseAddress = new Uri(string.Format("http://api.geonames.org/findNearByWeatherJSON?lat={0}&lng={1}&username={2}", latitude, longitude, username));
try
{
var response = await client.GetAsync(client.BaseAddress);
if (response.IsSuccessStatusCode)
{
var JsonResult = response.Content.ReadAsStringAsync().Result;
var weather = JsonConvert.DeserializeObject<WeatherResult>(JsonResult);
SetValues(weather);
}
else
{
Debug.WriteLine(response.RequestMessage);
}
}
catch (HttpRequestException ex)
{
Debug.WriteLine(ex.Message);
}
catch (System.Net.WebException ex)
{
Debug.WriteLine(ex.Message);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
Можете ли вы воспроизвести его с помощью [MVCE] (http://stackoverflow.com/help/mcve)? Это может быть несоответствие между dll, на которую вы ссылаетесь, и фактической dll, доступной во время выполнения, но с кодом может быть намного проще отслеживать – Icepickle
Я добавлю код, но не думаю, что это поможет. Он строит/компилирует проблему. Все ссылки на intellisense счастливы. Только во время выполнения, когда он запускает вызов метода, который создает экземпляр, он вызывает ошибку. Я убежден, что это какой-то справочный вопрос, но просто не могу понять. – IronRod