Я изучаю библиотеку .Net для подключения к API AdWords.Мой первый блок возникает, когда я пытаюсь создать сервис, используя мой AdWordsUser
объект.Я получаю TargetInvocationException
:
Exception has been thrown by the target of an invocation
Внутреннее исключение:
The value of the property 'type' cannot be parsed. The error is: Could not
load file or assembly 'Google.Ads.Common, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=52807268f2b614dc' or one of its dependencies. The located
assembly's manifest definition does not match the assembly reference. (Exception
from HRESULT: 0x80131040)
Основываясь на моем поиске Google, основное исправление предлагается добавить ссылку на SoapListenerExtension
в вашем приложении.конфигурации.Я попробовал два метода (показанные в конце вопроса) без изменений.
Мое приложение содержит ссылки на библиотеки Google.Ads.Common
, Google.AdWords
и System.Web.Services
.Вот мой код с расширенными ссылками для устранения неоднозначности.
var headers = new Dictionary<string, string>();
headers.Add("email", Properties.Settings.Default.AdWordsUserName);
// Rest of the creds
var _user = new Google.Api.Ads.AdWords.Lib.AdWordsUser(headers);
var sig = Google.Api.Ads.AdWords.Lib.AdWordsService.v201109.CampaignService;
var rawService = _user.GetService(sig); // The exception is thrown here
var service = (Google.Api.Ads.AdWords.v201109.CampaignService)rawService;
Если я пропущу пароль, изменений не будет, поэтому я не думаю, что это проблема с моими кредитами: код не получил этогоfar.
Библиотека Google.AdWords
включает некоторые классы в пространстве имен Google.Api.Ads.Common.Lib
, но не SoapListenerExtension
.Может быть, это спрятано в какой-то другой библиотеке DLL в этой библиотеке?
Я просмотрел здесь дюжину вопросов по SO, которые касаются API AdWords, но ничего не касалось этой конкретной ошибки.
Редактировать
Используя AppDomain.CurrentDomain.GetAssemblies()
, я опросил загруженные сборки.Если я добавлю эту безвредную строку:
var cs = Google.Api.Ads.AdWords.Lib.AdWordsService.v201109.CampaignService;
Эта сборка загружена, по-видимому, успешно:
Loaded: Google.Ads.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
... так что похоже, что сборка у меня без знака.Конечно же, есть подписанная версия API.К сожалению, он структурирован не так, как неподписанная версия, и большинство полностью определенных имен больше не действительны.Вернуться к чертежной доске.
Приложение
Метод веб-службы 1:
<system.web>
<webServices>
<soapExtensionTypes>
<add type="Google.Api.Ads.Common.Lib.SoapListenerExtension, Google.Ads.Common" priority="1" group="0"/>
</soapExtensionTypes>
</webServices>
</system.web>
Метод 2:
<system.web>
<webServices>
<soapExtensionTypes>
<add type="Google.Api.Ads.Common.Lib.SoapListenerExtension, Google.Ads.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=52807268f2b614dc" priority="1" group="Low"/>
</soapExtensionTypes>
</webServices>
</system.web>