Веб-работа: библиотека не найдена - PullRequest
0 голосов
/ 25 апреля 2018

У нас есть непрерывный WebJob, написанный на .NET Core 2.x и работающий в течение последних нескольких недель.Недавно кто-то внес некоторые изменения в этот WebJob и принес сторонний пакет NuGet.Теперь я не могу запустить WebJob, потому что он не может найти одну из зависимостей сторонних библиотек.

Это сообщение об ошибке:

D: \ local \ Temp\ jobs \ непрерывный \ Temp1 \ oitdncff.sfg> dotnet Temp1.dll
Ошибка:
Не найдена сборка, указанная в манифесте зависимостей приложения (Temp1.deps.json):
пакет: 'Система.Drawing.Common ', версия:' 4.5.0-preview1-25914-04 '
путь:' runtimes / win / lib / netcoreapp2.0 / System.Drawing.Common.dll '

Я пробовал несколько вещей, которые нашел во время поиска этой проблемы.Вот PropertyGroup и ItemGroup (пакеты NuGet) из файла csproj:

<PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <ApplicationIcon />
    <StartupObject>Temp1.Program</StartupObject>
    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
    <LangVersion>latest</LangVersion>
    <Version>1.0.0.0</Version>
    <PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
</PropertyGroup>
<ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
    <PackageReference Include="AsyncEnumerator" Version="2.1.0" />
    <PackageReference Include="EPPlus.Core" Version="1.5.4" />
    <PackageReference Include="Microsoft.ApplicationInsights" Version="2.5.1" />
    <PackageReference Include="Microsoft.ApplicationInsights.DependencyCollector" Version="2.5.1" />
    <PackageReference Include="Microsoft.Azure.ServiceBus" Version="2.0.0" />
    <PackageReference Include="Microsoft.Azure.WebJobs" Version="3.0.0-beta4" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Logging.ApplicationInsights" Version="3.0.0-beta4" />
    <PackageReference Include="Microsoft.Azure.WebJobs.ServiceBus" Version="3.0.0-beta4" />
    <PackageReference Include="Microsoft.Extensions.Configuration" Version="2.0.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.0.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.0.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.0.0" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.0.0" />
    <PackageReference Include="Microsoft.Extensions.Logging" Version="2.0.0" />
    <PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="2.0.0" />
    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="2.0.0" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="2.0.0" />
    <PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
</ItemGroup>

Для предложений в Интернете я добавил строку
<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
и
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />

Рассматриваемый пакет, имеющий зависимость: EPPlus.Core

Я подтвердил, что библиотека System.Drawing.Common существует в папке приложения в нашем веб-приложении Azure, нокогда WebJob запускается, он игнорирует, что файл находится там и ищет в средах выполнения (GAC) и не работает.

ОБНОВЛЕНИЕ: Я понял, что пакет EPPlus.core не был официальнымпоэтому переключился на официальный пакет, надеясь, что это устранит ошибку.Та же ошибка, но новая версия System.Drawing.Common version: 4.5.0-preview1-26216-02

Я вручную добавил пакет NuGet для System.Drawing.Common version: 4.5.0-preview2-26406-04 в проект, это удалило первоначальную ошибку, но затем я начал получать ошибку, которую Microsoft.Win32.SystemEvents version: 4.5.0-preview2-26406-04 не смогбыть найденным.Эта библиотека зависит от System.Drawing.Common.

Я попытался сделать то же самое, что и выше, и добавил пакет NuGet для Microsoft.Win32.SystemEvents version: 4.5.0-preview2-26406-04 непосредственно в проект, но на этот раз ошибка не исчезла.

ДАЛЬНЕЙШЕ ОБНОВЛЕНИЕ: После поиска, я наткнулся на сообщение здесь , в котором говорилось о публикации , а затем заархивировал опубликованный каталог и загрузил zip.Это действительно сработало, ошибка, о которой идет речь, исчезла, но это не совсем решение.Мы используем VSTS в качестве нашей системы репо и нашего CI / CD.У меня есть настройка сборки, чтобы сделать публикацию, а затем скопировать файлы.WebJob выдает ошибку при развертывании через этот процесс.

1 Ответ

0 голосов
/ 02 мая 2018

Во-первых, я хотел бы заявить, что на сегодняшний день, насколько мне известно, .NET Core не поддерживается на 100% с помощью веб-заданий Azure (не стесняйтесь исправлять меня, если я ошибаюсь), но есть множество статей и сообщений накак заставить их работать.

Ниже приведено решение, которое я сделал, чтобы обойти вышеупомянутую проблему, с которой я столкнулся, и хотя я не чувствую, что это элегантно, я чувствую, что Microsoft сделала нечто странное, что большинство разработчиковНе думаю, что это правильный путь.

Причина, по которой у меня возникли проблемы, заключалась в том, что при сборке (при отладке или выпуске) файл манифеста всегда указывал на среды выполнения (GAC).Локальный запуск на моем компьютере никогда не был проблемой, потому что файлы можно было найти.Странность заключается в том, что при сборке в режиме выпуска все файлы были скопированы в папку bin, но манифест все равно велел программе смотреть во время выполнения и не использовать локальные копии.Когда это было передано самой WebJob, эти файлы не существовали во время выполнения, поэтому WebJob будет выдавать исключения.

Обходной путь, который я должен был сделать, следующий:

  1. DotNet build (решение - конфигурация выпуска)
  2. публикация dotnet (только для WebJobs - не архивировать)
  3. публикация dotnet (только для веб-проектов - не архивировать)
  4. Копирование данных WebJobиз публикации в каталог веб-проекта \ App_Data \ jobs \ непрерывный \ каталог
  5. Zip Up опубликованный каталог веб-проекта (это то, что развертывается)

Мое честное мнение таково, когда япостроить проект webjob в режиме выпуска, процесс должен преобразовать манифест для поиска любых библиотек, на которые есть ссылки, локально, прежде чем пытаться их искать во время выполнения.

...