Подтвердить что ты не робот

Ошибка приложения ASP.net - Не удалось загрузить файл или сборку "Microsoft.Threading.Tasks.Extensions.Desktop"

Я хочу создать приложение ASP.NET Google BigQuery С# с использованием OAuth2 и рамки .Net 4.5. Я запустил эти установки 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

и я разместил соответствующие "данные" в файле с кодом "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"
                }
            );
        }
    }
}

Я установил эту страницу как стартовую страницу проекта. Я выбрал "Установленное приложение", когда я построил файл идентификатора клиента в консоли Google.

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

и я убедился, что добавил этот файл (client_secrets.json) в проводник решений в VS2013. В коде, я убедился, что я правильно сопоставлен с файлом client_secrets с Server.MapPath. Для машинного удостоверения я использовал этот код

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

в качестве отправной точки. Когда я запускаю приложение, он возвращает страницу с ошибкой браузера, которая начинается с

Не удалось загрузить файл или сборку "Microsoft.Threading.Tasks.Extensions.Desktop, Version = 1.0.16.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a" или одна из его зависимостей. Система не может найти указанный файл.

и сбой в строке "credential =" . Я попытался добавить некоторые изображения фактической страницы с разбивкой браузера ASP.net, показывающей трассировку загрузки загрузки/трассировку стека/и т.д., Но похоже, что у меня нет прав учетной записи для этого. Когда я устанавливаю точку останова на строке "credential =" , а затем запускаю приложение через

DEBUG -> Start Debugging

в VS2013, страница останавливается в строке "credential =" и открывается сборщик файлов, ища файл

"GoogleClientSecrets.cs"

из каталога

"C:\код\google.com\Google-Апи-Dotnet-клиент\умолчанию\Tools\Google.Apis.Release\Bin\Debug\вывода\умолчанию\Src\GoogleApis.Auth\OAuth2\GoogleClientSecrets.cs"

который нигде не находится на диске. Используя трассировку загрузки сборки на сгенерированной странице ошибок ASP.net, я попытался выполнить поиск в предлагаемых файлах конфигурации, но ничего не получилось. В более общем плане, я попытался найти эту проблему в StackOverflow, и, хотя я действительно об этом упоминал, ни один из этих материалов не помог.

4b9b3361

Ответ 1

Поскольку ошибка основана на том, что последняя версия Microsoft.Bcl.Async не работает в .NET 4.5, вы можете попробовать сделать следующее:

Откройте консоль диспетчера пакетов и выполните следующие команды:
1) Uninstall-Package Microsoft.Bcl.Async -Force
2) Install-Package Microsoft.Bcl.Async -Version 1.0.16

Он работает в образце, который я сейчас пишу. Пожалуйста, дайте мне знать, если это сработает для вас.

ОБНОВЛЕНИЕ (21 марта): Вы можете обновить пакет (доступна новая версия 1.0.166-бета - https://www.nuget.org/packages/Microsoft.Bcl.Async/1.0.166-beta).
Я тестировал его на VS2013 с помощью платформы .NET 4.5, и он работает.

Ответ 2

Они выпустили новую версию -Package Microsoft.Bcl.Async.

Если у кого-то есть эта проблема, установите версию "последняя" вместо 1.0.16.

Я надеюсь, что это сработает для вас.

Ответ 3

Я уже встречал эту ошибку раньше. Похоже, что пакет Bcl.Async содержит ссылку на Microsoft.Threading.Tasks.Extensions.Desktop при запуске приложений .NET 4.0, но так или иначе отсутствует в приложении .NET 4.5.

Мой совет для вас (пока я не буду считать нашего с владельцем Microsoft.Bcl.Async, почему это происходит) заключается в копировании Microsoft.Threading.Tasks.Extensions.Desktop из пакетов \Microsoft.Bcl.Async.1.0. 165\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll в папку BIN. Он должен решить эту проблему.

ОБНОВЛЕНИЕ (17 марта): Подумайте о добавлении в проект следующего события Post-build:

copy/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.

Ответ 4

Этот подход не устранил проблему - я получил ту же ошибку времени выполнения. Но после перекомпоновки я заметил, что компилятор 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 или некоторые низкоуровневые механизмы внутри .Net, или оба. Или ни того, ни другого. В любом случае, спасибо за вашу помощь. Мне только хотелось бы, чтобы я лучше понял внутреннюю технику.