asp.net - googlewebauthorizationbroker - oauth2 c#
Se bloquea la aplicaciĆ³n ASP.net: no se pudo cargar el archivo o el ensamblaje ''Microsoft.Threading.Tasks.Extensions.Desktop'' (4)
Quiero crear una aplicación Google BigQuery C # ASP.net utilizando OAuth2 y el marco .Net 4.5. Corrí estas instalaciones NuGet
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
y coloqué los "usos" relevantes en el archivo de código subyacente "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"
}
);
}
}
}
Establecí esta página específica como la página de inicio del proyecto. Escogí "Aplicación instalada" cuando construí el archivo de ID de cliente en la consola de Google
APIS & auth -> Credentials -> CREATE NEW CLIENT ID
y me aseguré de agregar este archivo (client_secrets.json) con el explorador de soluciones en VS2013. En el código subyacente, me aseguré de asignarme correctamente al archivo client_secrets con Server.MapPath. Para la maquinaria de credenciales, utilicé este código.
<https://code.google.com/p/google-api-dotnet-client/wiki/OAuth2>
como punto de partida. Cuando ejecuto la aplicación, devuelve una página de error del navegador que comienza con
No se pudo cargar el archivo o el ensamblaje ''Microsoft.Threading.Tasks.Extensions.Desktop, Version = 1.0.16.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'' o una de sus dependencias. El sistema no puede encontrar el archivo especificado.
y se bloquea en la línea "credencial =". Intenté agregar algunas imágenes de la página del navegador ASP.net bloqueada que muestra el rastreo de carga de ensamblaje / rastreo de pila / etc. pero parece que no tengo los derechos de cuenta para esto. Cuando establezco un punto de interrupción en la línea "credential =" y luego ejecuto la aplicación a través de
DEBUG -> Start Debugging
en VS2013, la página se detiene en la línea "credential =" y se abre un selector de archivos, buscando un archivo
"GoogleClientSecrets.cs"
del directorio
"c: / code / google.com / google-api-dotnet-client / default / Tools / Google.Apis.Release / bin / Debug / output / default / Src / GoogleApis.Auth / OAuth2 / GoogleClientSecrets.cs"
que no está en ninguna parte en la unidad. Al usar el rastreo de carga de ensamblaje en la página de error de ASP.net generada, intenté buscar en los archivos de configuración sugeridos pero nada funcionó. Más generalmente, traté de buscar este problema en StackOverflow y, aunque encontré alguna mención al respecto, nada de ese material me ayudó.
Debido a que el error se basa en el hecho de que la última versión de Microsoft.Bcl.Async no funciona en .NET 4.5, puede intentar hacer lo siguiente:
Abra su Consola del administrador de paquetes y ejecute los siguientes comandos:
1) Paquete de desinstalación Microsoft.Bcl.Async -Force
2) Install-Package Microsoft.Bcl.Async -Version 1.0.16
Funciona en una muestra que estoy escribiendo actualmente. Por favor, dígame si le funciona.
ACTUALIZACIÓN (21 de marzo): puede actualizar el paquete (la nueva versión 1.0.166-beta está disponible - https://www.nuget.org/packages/Microsoft.Bcl.Async/1.0.166-beta ).
Lo probé en VS2013 con el framework .NET 4.5 y funciona.
Este enfoque no solucionó el problema: obtuve el mismo error de tiempo de ejecución. Pero después de una reconstrucción, noté que el compilador VS2013 mostraba esta advertencia, que formateé un poco para el editor 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>
Así que dejé caer el bloque sugerido en el archivo web.config de la aplicación. Entonces la aplicación decidió trabajar. No tengo idea de por qué funciona ahora, pero tengo la impresión de que el bloque XML y / o la solución de referencia que mencionó de alguna manera afectó a Microsoft.Threading.Tasks.Extensions.Desktop DLL, o alguna maquinaria de bajo nivel dentro de .Net, o ambos. O tampoco, por lo que sé. De todos modos, gracias por tu ayuda. Ojalá tuviera una mejor comprensión de la maquinaria interna.
Lanzaron una nueva versión de -Package Microsoft.Bcl.Async.
Si alguien tiene este problema, instale la versión "más reciente" en lugar de la 1.0.16.
Espero que te funcione.
Ya he encontrado este error antes. Parece que el paquete Bcl.Async contiene una referencia a Microsoft.Threading.Tasks.Extensions.Desktop cuando ejecuta una aplicación .NET 4.0, pero de alguna manera no se encuentra en la aplicación .NET 4.5.
Mi consejo para usted (hasta que sepa por qué sucede con el propietario de Microsoft.Bcl.Async) es copiar Microsoft.Threading.Tasks.Extensions.Desktop de los paquetes / Microsoft.Bcl.Async.1.0.165 / lib / net40 / Microsoft.Threading.Tasks.Extensions.Desktop.dll a su carpeta BIN. Debería resolver este problema.
ACTUALIZACIÓN (17 de marzo): considere la posibilidad de agregar el siguiente evento posterior a la compilación en su proyecto:
copy / Y "$ (SolutionDir) packages / Microsoft.Bcl.Async.1.0.16 / lib / net40 / Microsoft.Threading.Tasks.Extensions.Desktop.dll" "$ (TargetDir) Microsoft.Threading.Tasks.Extensions.Desktop .dll "
Desafortunadamente, todavía no hay una solución para este problema por parte de los propietarios del paquete Bcl.Async.