代码之家  ›  专栏  ›  技术社区  ›  Jason H

Web作业:找不到库

  •  1
  • Jason H  · 技术社区  · 6 年前

    我们有一个连续的WebJob。净核心2。过去几周一直运行良好。最近有人对此WebJob进行了一些更改,并引入了第三方NuGet包。现在,我无法启动WebJob,因为它无法找到其中一个第三方库依赖项。

    这是错误消息:

    D: \本地\临时\作业\连续\临时1 \ oitdncff。sfg>dotnet Temp1。动态链接库
    错误:
    找不到应用程序依赖项清单(Temp1.deps.json)中指定的程序集:
    软件包:'系统。绘画“通用”,版本:“4.5.0-preview1-25914-04”
    路径:“runtimes/win/lib/netcoreapp2。0/系统。绘画常见的dll'

    在谷歌搜索这个问题时,我尝试了几件我发现的事情。以下是csproj文件中的PropertyGroup和ItemGroup(NuGet包):

    <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。果心

    我已经确认图书馆 System.Drawing.Common 确实存在于Azure Web应用程序的应用程序文件夹中,但当WebJob启动时,它会忽略该文件在那里,并在运行时(GAC)中查找并失败。

    更新时间: 我意识到EPPlus。核心包不是官方的,所以切换到官方包,希望这能解决错误。相同错误,但为 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 找不到。此库依赖于 系统绘画常见的

    我尝试执行与上面相同的操作,并为添加了NuGet包 微软Win32。SystemEvents版本:4.5.0-preview2-26406-04 直接发送到项目,但这一次错误不会消失。

    进一步更新: 在搜索了更多内容后,我发现了一个帖子 here 谈到的 发布 然后压缩已发布的目录并上载zip。这确实有效,所讨论的错误已经消失,但这并不是真正的解决方案。我们使用VST作为我们的回购系统和CI/CD。我将构建配置设置为进行发布,然后复制文件。通过此进程部署WebJob时,WebJob会抛出错误。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Jason H    6 年前

    首先,我想声明,据我所知,截至今天。Azure WebJobs并不是百分之百支持NET Core(如果我错了,请随时纠正我),但有很多文章和帖子介绍了如何让它们工作。

    下面是我为解决上述问题而采取的解决方案,虽然我觉得这并不优雅,但我确实觉得微软做了一些奇怪的事情,大多数开发人员认为这不是正确的途径。

    我遇到问题的原因是,当我构建(在调试或发布中)清单文件时,它总是指向运行时(GAC)。在我的盒子上本地运行从来都不是问题,因为可以找到文件。奇怪的是,在发布模式下构建时,所有文件都复制到了bin文件夹,但清单仍然告诉程序查看运行时,不要使用本地副本。当这被推送到WebJob本身时,这些文件在运行时中不存在,因此WebJob会抛出异常。

    我必须做的变通方法如下:

    1. dotnet build(解决方案-版本配置)
    2. dotnet发布(仅限WebJobs-不压缩)
    3. dotnet发布(仅限Web项目-不压缩)
    4. 将WebJob数据从Publish复制到Web项目目录\App\u Data\jobs\continuous\directory
    5. 压缩Web项目发布目录(这是部署的内容)

    我诚实的意见是,当我在发布模式下构建webjob项目时,在尝试在运行时中查找任何引用的库之前,该过程应该转换清单以在本地查找它们。

    推荐文章