我正在学习a .Net library以连接到AdWords API。当我尝试使用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)
根据我的谷歌搜索,建议的主要修复是在app.config中添加对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;
如果我省略密码就没有变化,所以我不认为这是我的信条问题:代码还没有那么远。
Google.AdWords
库包含Google.Api.Ads.Common.Lib
命名空间中的一些类,但不包括SoapListenerExtension
。这可能隐藏在这个库中的其他DLL中吗?
我在这里看了十几个与AdWords API相关的问题,但没有任何与此特定错误有关的问题。
修改
使用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可用。疯狂地,它的结构与未签名的版本不同,并且大多数完全限定的名称不再有效。回到绘图板。
附录
Web服务方法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>
答案 0 :(得分:0)
交换我对已签名版本的引用就可以了。回想起来,我认为错误信息指的是相当清楚。我想知道无符号版本的用途是什么,或者换句话说,为什么只有签名版本才能在这个实例中工作?