问题的简短版本:
我遇到了困难,包括我的.NET Core Console App所依赖的程序集。
最初,NuGet包中的程序集未包含在bin
文件夹中,即使我可以在Debug
模式下运行应用程序而没有任何问题。
发现一篇文章建议我应该在<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
文件中添加myapp.csproj
。
这样做包括dll
文件夹中的NuGet包的bin
文件但是我将我的控制台应用程序复制到Azure以作为WebJob运行后,我收到错误告诉我System.Data.SqlClient
丢失了。
在检查WebJob运行的文件夹后,我可以看到dll
的System.Data.SqlClient
实际上在文件夹中。我的结论是版本号可能是一个问题。错误表明以下内容:
找不到'System.Data.SqlClient',版本:'4.4.2'
当我右键单击此程序集的dll
文件并检查其版本时,它显示版本4.6。
知道如何解决这个问题吗?
更长版本:
我构建了这个.NET Core 2.0控制台应用程序,以便在本文之后作为WebJob运行:http://matt-roberts.me/azure-webjobs-in-net-core-2-with-di-and-configuration/
我不得不手动创建这个WebJobs应用程序,因为目前Visual Studio没有提供在.NET Core中构建Azure WebJobs的方法。
由于当前的限制,我也无法直接从Visual Studio发布我的WebJobs应用程序。
所以,我尝试将其压缩并通过Azure Portal上传。这是我意识到NuGet程序集不包含在bin
文件夹中的时候。故事的其余部分已经出现在“短版”部分。
我很欣赏解决这个问题的一些建议。
更新:
当我在项目的根文件夹中运行dotnet publish --self-contained -r win32-x64 -c Release
时,我收到以下错误:
不太确定WebJobs规范,但您应该能够使用dotnet publish --self-contained -r win-x64 -c Release
生成可执行文件及其依赖项。压缩它们,您应该能够部署到Azure。
实际上没有必要像你那样修改你的csproj
。
此外,您可以使用.NET IL Linker缩小生成的文件夹的大小。
参考