加载Google.Apis.dll给我StackoverflowException [英] Loading Google.Apis.dll gives me StackoverflowException
问题描述
我无法将新的Google Analytics(分析)API添加到我使用ExcelDna构建的Excel加载项中.
I'm having trouble with adding the new Google Analytics APIs to an Excel add-in that I'm building using ExcelDna.
我添加了以下Nuget:
I've added these Nugets:
<package id="Google.Apis" version="1.9.3" targetFramework="net45" />
<package id="Google.Apis.Analytics.v3" version="1.9.2.1160" targetFramework="net45" />
<package id="Google.Apis.Auth" version="1.9.3" targetFramework="net45" />
<package id="Google.Apis.Core" version="1.9.3" targetFramework="net45" />
如果我创建一个课程:
public class Foo {
public Foo() {
AnalyticsService bar = null;
}
}
一旦我尝试创建此类的实例,就会得到StackoverflowException.
As soon as I try to create an instance of this class I get a StackoverflowException.
所以我猜想这是加载Google Apis程序集的问题吗?
So I'm guessing it's an issue with loading of the Google Apis assemblys?
使用FusionLog,我可以看到Google.Apis.Analytics.v3.dll可以正常加载,但是在Google.Apis.DLL中存在问题:
Using FusionLog I can see that Google.Apis.Analytics.v3.dll loads ok but in Google.Apis.DLL there's a problem:
*** Assembly Binder Log Entry (2015-08-27 @ 14:12:32) ***
The operation failed.
Bind result: hr = 0x80131040. No description available.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Running under executable C:\Program Files\Microsoft Office\Office14\EXCEL.EXE
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: DisplayName = Google.Apis, Version=1.9.2.27817, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab
(Fully-specified)
LOG: Appbase = file:///C:/Checkouts/NielsBosma/trunk/projects/SeoTools/bin/Debug
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = Excel-DNA: C:\Checkouts\NielsBosma\trunk\projects\SeoTools\bin\Debug\SeoTools64.xll
Calling assembly : Google.Apis.Analytics.v3, Version=1.9.2.116, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab.
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Google.Apis, Version=1.9.2.27817, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/Checkouts/NielsBosma/trunk/projects/SeoTools/bin/Debug/Google.Apis.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\Checkouts\NielsBosma\trunk\projects\SeoTools\bin\Debug\Google.Apis.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: Google.Apis, Version=1.9.3.19379, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab
WRN: Comparing the assembly name resulted in the mismatch: Revision Number
ERR: The assembly reference did not match the assembly definition found.
ERR: Run-from-source setup phase failed with hr = 0x80131040.
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
我已经使用这些软件包创建了一个控制台应用程序,该软件包不存在此问题.
I've created a console app with these packages where this problem doesn't exsist.
现在,我被卡住了.下一步怎么办?
Now I'm stuck. What to do next?
更新
我更新了NetOffice,摆脱了StackoverflowExeception.现在我得到了这个异常:
I updated NetOffice and got rid of the StackoverflowExeception. Now I get this exception:
Could not load file or assembly 'Google.Apis, Version=1.9.2.27817, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
推荐答案
您应该导入的唯一内容是
the only thing you should have imported was
PM>安装软件包Google.Apis.Analytics.v3
我测试了您发布的代码,但没有给我错误.
I tested the code you posted and its not giving me an error.
public class Foo
{
public Foo()
{
AnalyticsService bar = null;
}
}
class Program
{
static void Main(string[] args)
{
Foo test = new Foo();
}
}
带有Google Analtyics的Oauth2示例
/// <summary>
/// Authenticate to Google Using Oauth2
/// Documentation https://developers.google.com/accounts/docs/OAuth2
/// </summary>
/// <param name="clientId">From Google Developer console https://console.developers.google.com</param>
/// <param name="clientSecret">From Google Developer console https://console.developers.google.com</param>
/// <param name="userName">A string used to identify a user.</param>
/// <returns></returns>
public static AnalyticsService AuthenticateOauth(string clientId, string clientSecret, string userName)
{
string[] scopes = new string[] { AnalyticsService.Scope.Analytics, // view and manage your analytics data
AnalyticsService.Scope.AnalyticsEdit, // edit management actives
AnalyticsService.Scope.AnalyticsManageUsers, // manage users
AnalyticsService.Scope.AnalyticsReadonly}; // View analytics data
try
{
// here is where we Request the user to give us access, or use the Refresh Token that was previously stored in %AppData%
UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets { ClientId = clientId, ClientSecret = clientSecret }
, scopes
, userName
, CancellationToken.None
, new FileDataStore("Daimto.GoogleAnalytics.Auth.Store")).Result;
AnalyticsService service = new AnalyticsService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Analytics API Sample",
});
return service;
}
catch (Exception ex)
{
Console.WriteLine(ex.InnerException);
return null;
}
}
从使用C#教程的Google Analytics(分析)API身份验证
这篇关于加载Google.Apis.dll给我StackoverflowException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!