2014-01-11 93 views
18

我想使用OAuth2和.Net 4.5框架構建Google BigQuery C#ASP.net應用程序。我跑這些的NuGet安裝ASP.net應用程序崩潰 - 無法加載文件或程序集'Microsoft.Threading.Tasks.Extensions.Desktop'

Install-Package Google.Apis.Bigquery.v2 -Pre 
Install-Package Google.Apis.Authentication.OAuth2 -Version 1.2.4696.27634 

Install-Package Google.Apis -Pre 
Install-Package Google.Apis.Auth -Pre 

,我放置在相關的「usings」代碼隱藏文件「default.aspx.cs」:

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Threading; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

using Google.Apis.Auth.OAuth2; 
using Google.Apis.Services; 
using Google.Apis.Bigquery.v2; 
using Google.Apis.Bigquery.v2.Data; 

namespace BigQueryDemoApp 
{ 
    public partial class _Default : Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      UserCredential credential; 
      FileStream stream; 

      using (stream = new FileStream(
        Server.MapPath("~/client_secrets.json"), 
        FileMode.Open, FileAccess.Read) 
       ) 
      { 
       GoogleWebAuthorizationBroker.Folder = 
        "Tasks.Auth.Store"; 
       credential = GoogleWebAuthorizationBroker. 
        AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets, 
        new[] { BigqueryService.Scope.Bigquery }, 
        "user", CancellationToken.None).Result; 
      } 

      // Initialize the service. 
      var Service = new BigqueryService(
       new BaseClientService.Initializer() 
       { 
        HttpClientInitializer = credential, 
        ApplicationName = "BigQueryDemo" 
       } 
      ); 
     } 
    } 
} 

我設置特定頁面作爲項目起始頁。我拿起「已安裝的應用」當我建立的客戶ID文件在谷歌控制檯

APIS & auth -> Credentials -> CREATE NEW CLIENT ID 

,我確信我添加文件(的client_secrets.json)在VS2013的解決方案資源管理器。在代碼隱藏方面,我確信我已正確映射到Server.MapPath的client_secrets文件。對於憑證機構,我使用此代碼

<https://code.google.com/p/google-api-dotnet-client/wiki/OAuth2> 

作爲起點。當我運行的應用程序,它返回一個與

無法加載文件或程序集Microsoft.Threading.Tasks.Extensions.Desktop啓動瀏覽器錯誤頁,版本= 1.0.16.0,文化=中立,公鑰= b03f5f7f11d50a3a'或它的一個依賴關係。該系統找不到指定的文件。

並在「憑證=」行崩潰。我試圖添加一些實際的ASP.net崩潰的瀏覽器頁面的圖像,顯​​示程序集加載跟蹤/堆棧跟蹤/等,但它看起來像我沒有這個帳戶權限。當我在「證書=」行設置一個斷點,然後通過

DEBUG -> Start Debugging 
在VS2013

運行應用程序,網頁停止在「證書=」線和一個文件選擇器打開,尋找文件

"GoogleClientSecrets.cs" 

從目錄

「C:\代碼\ google.com \谷歌API-DOTNET客戶端\ DEFAULT \工具\ Google.Apis.Release \ BIN \調試\輸出\ DEFAULT \ SRC \ GoogleApis.Auth \ OAuth2 \ GoogleClientSecrets.cs「

這是無處在驅動器上。在生成的ASP.net錯誤頁面中使用Assembly Load Trace,我嘗試瞭解建議的配置文件,但沒有任何工作。更一般地說,我試着在StackOverflow中尋找這個問題,雖然我找到了一些提及它的東西,但沒有一個材料有幫助。

回答

29

因爲錯誤是基於一個事實,即Microsoft.Bcl.Async的最新版本不工作在.NET 4.5,你可以嘗試做如下:

打開你的包管理器控制檯,運行以下命令:
1)卸載,包裝Microsoft.Bcl.Async -Force
2)安裝,包裝Microsoft.Bcl.Async -Version 1.0.16

它的工作原理樣品我在正在寫作。請讓我知道它是否適合你。

更新(3月21日): 您可以更新軟件包(新版本1.0.166-beta可用 - https://www.nuget.org/packages/Microsoft.Bcl.Async/1.0.166-beta)。
我使用.NET 4.5框架在VS2013上測試了它,它工作正常。

+0

你好。對不起,延遲。我試過你的建議,它的工作原理。謝謝你的幫助! - Frank –

3

我以前已經遇到過這個錯誤。它看起來像Bcl.Async包中包含一個引用到Microsoft.Threading.Tasks.Extensions.Desktop當您運行一個.NET 4.0應用程序,但不知何故它在.NET 4.5應用程序中丟失。

我對你的建議(直到我將與Microsoft.Bcl.Async的所有者一起來看看它爲什麼會發生)是從packages \ Microsoft.Bcl.Async.1.0複製Microsoft.Threading.Tasks.Extensions.Desktop .165 \ lib \ net40 \ Microsoft.Threading.Tasks.Extensions.Desktop.dll複製到您的BIN文件夾中。它應該解決這個問題。

UPDATE(3月17日): 考慮加入以下生成後事件到您的項目:

複製/ Y「$(SolutionDir)包\ Microsoft.Bcl.Async.1.0.16 \ LIB \ net40 \ Microsoft.Threading.Tasks.Extensions.Desktop.dll」 「$(TARGETDIR)Microsoft.Threading.Tasks.Extensions.Desktop.dll」

不幸的是,不是這個問題的解決方案尚未來自Bcl.Async軟件包的所有者。

+0

爲我工作。謝謝 – Manu

2

這種做法並沒有解決這個問題 - 我得到了同樣的運行時錯誤。但重建後,我注意到VS2013編譯器顯示這個警告,我格式化一個小的SO編輯

C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1635,5): warning 
MSB3247: Found conflicts between different versions of the same dependent assembly. In Visual 
Studio, double-click this warning (or select it and press Enter) to fix the conflicts; 
otherwise, add the following binding redirects to the "runtime" node in the application 
configuration file: 

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Threading.Tasks.Extensions.Desktop" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" /> 
     <bindingRedirect oldVersion="0.0.0.0-1.0.165.0" newVersion="1.0.165.0" /> 
    </dependentAssembly> 
</assemblyBinding> 

所以我在應用程序web.config文件中投下了建議的塊。然後,該應用程序決定工作。我不知道爲什麼它現在可行,但我得到的印象是,您提到的XML塊和/或參考修復程序以某種方式觸及了Microsoft.Threading.Tasks.Extensions.Desktop DLL或.NET中的一些底層機器,或兩者。或者,既然我知道。無論如何,感謝您的幫助。我只希望我對內部機器有更好的瞭解。

+0

我聯繫了NuGet軟件包的所有者,希望我們很快會找到更好的解決方案。 – peleyal

+0

顯然1.0.166(https://www.nuget.org/packages/Microsoft.Bcl.Async/1.0.166-beta)修正了這個問題。 – peleyal

4

他們發佈-package Microsoft.Bcl.Async的新版本。

如果有人遇到此問題,請安裝「latest」版本,而不是1.0.16。

我希望它適合你。

+0

要非常清楚:安裝google API nuget包,然後添加當前的Microsoft.Bcl.Async,它將替換Google包引用的 – Guillaume

相關問題