我们有一个用 .NET Core 2.x 编写的连续 WebJob,过去几周一直运行良好。最近有人对这个 WebJob 进行了一些更改,并引入了一个 3rd 方 NuGet 包。现在,我无法启动 WebJob,因为它无法找到第 3 方库依赖项之一。
这是错误消息:
D:\local\Temp\jobs\continuous\Temp1\oitdncff.sfg>dotnet Temp1.dll
错误:
找不到应用程序依赖项清单 (Temp1.deps.json) 中指定的程序集:
包:'System.Drawing.Common ',版本:'4.5.0-preview1-25914-04'
路径:'runtimes/win/lib/netcoreapp2.0/System.Drawing.Common.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.Core
我已经确认该库System.Drawing.Common
确实存在于我们的 Azure Web 应用程序的 app 文件夹中,但是当 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 作为我们的 repo 系统和我们的 CI/CD。我将构建配置设置为发布,然后复制文件。WebJob 在通过此过程部署时会引发错误。