Fra*_*rpa 5 sqlite dll system.data.sqlite docker dockerfile
图书馆似乎经常出现问题SQLite.Interop.dll
。只需看看这些其他 StackOverflow 问题即可:
我\xe2\x80\x99已经完成了以上所有内容以及更多内容:
\nSystem.Data.SQLite.Core
NuGet 包,*.csproj
元素,x64
而Any CPU
不是没有成功。关键要素是应用程序在本地运行得很好,但我需要让它在Docker上运行,而问题就出现在 \xe2\x80\x99s 上。情况是我\xe2\x80\x99m 使用Visual Studio 2022处理.NET Core 3.1控制台应用程序。该应用程序最终将部署在AKS(Azure Kubernetes Service)上。当然,首先我需要让它在我的开发机器上本地安装的 Docker 上运行。在 Visual Studio 上构建控制台应用程序项目没有给我带来任何错误,并且它在 Visual Studio 中运行良好。使用适当的 Dockerfile构建其 Docker 映像也不会出现任何问题,但在 Docker 上运行相同的映像会引发以下异常:。目前,该项目已安装 NuGet 包,并且 \xe2\x80\ x99t在. 该异常是由控制台应用程序之一引用的项目引发的;该项目同时安装了和NuGet 软件包。控制台应用程序\xe2\x80\x99s 项目仅安装了该软件包(我已经尝试安装该软件包,但没有成功)。现在,所有项目都安装了 NuGet 包(尝试一下),这会导致将其作为依赖项安装。Unable to load DLL \'SQLite.Interop.dll\': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
System.Data.SQLite.Core
*.csproj
System.Data.SQLite.Core
System.Data.SQLite
System.Data.SQLite.Core
System.Data.SQLite
System.Data.SQLite
System.Data.SQLite.Core
我使用了Dockerfile
Visual Studio 2022 的预组装,它处理所有各种引用的项目:
FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base\nWORKDIR /app\n\nFROM mcr.microsoft.com/dotnet/sdk:3.1 AS build\nWORKDIR /src\nCOPY ["ProjectA/ProjectA.csproj", "ProjectA/"]\nCOPY ["ProjectB/ProjectB.csproj", "ProjectB/"]\n#COPY all the other referenced projects\nRUN dotnet restore "ProjectA/ProjectA.csproj"\nCOPY . .\nWORKDIR "/src/ProjectA"\nRUN dotnet build "ProjectA.csproj" -c Release -o /app/build\n\nFROM build AS publish\nRUN dotnet publish "ProjectA.csproj" -c Release -o /app/publish\n\nFROM base AS final\nWORKDIR /app\nCOPY --from=publish /app/publish .\nENTRYPOINT ["dotnet", "ProjectA.dll"]\n
Run Code Online (Sandbox Code Playgroud)\n由于此 Dockerfile 基于多阶段构建,因此它具有以下几行:
\n...\nRUN dotnet build "MyProject.csproj" -c Release -o /app/build\n...\nRUN dotnet publish "MyProject.csproj" -c Release -o /app/publish\n...\n
Run Code Online (Sandbox Code Playgroud)\n首先构建代码,然后发布它。鉴于此dotnet publish
,我决定退后一步,确保至少我能够自己发布该项目,以缩小问题范围。我发现将其本地发布到文件夹上也会给我带来一些问题,特别是NU1605错误,它阻止我成功结束该过程。我按照Microsoft 的建议解决了该问题。现在,如果我运行.exe
位于发布目标文件夹内的应用程序,该应用程序将按预期工作。
是时候最终将其制作为 Docker 镜像了。镜像构建过程很顺利,但是在Unable...
运行时出现了错误。SQLite.Interop.dll
网上看的,建议直接把文件移到文件夹SQLite.Interop.dll
bin
里解决问题;事实上,最初,我发现它位于bin\\Release\\netcoreapp3.1\\runtimes\\
文件夹内,包括其目录win-x86
和win-x64
子目录。为了摆脱\xe2\x80\x9c这个runtimes
文件夹的\xe2\x80\x9d,我尝试将项目发布到本地文件夹上,设置如下:
事实上,这使得SQLite.Interop.dll
直接出现在bin
文件夹内并删除了该runtimes
文件夹。因此,为了获得与 Docker 相同的结果,我修改了 Dockerfile,如下所示:
...\nRUN dotnet build "MyProject.csproj" -c Release -o /app/build -r win-x64\n...\nRUN dotnet publish "MyProject.csproj" -c Release -o /app/publish -r win-x64\n...\n
Run Code Online (Sandbox Code Playgroud)\n现在该SQLite.Interop.dll
文件也直接出现bin
在 Docker 运行容器的文件夹内,所以我当时认为一切都很好,但我仍然遇到了异常。
我发现在本地运行应用程序(而不是在 Docker 中)而不指定目标运行时(因此,将构建过程保持为而Any CPU
不是x64
),不会引发异常(也就是说,将runtimes/
文件夹和其中的两个SQLite.Interop.dll
文件保留在 和 中win-x86
)win-x64
子文件夹)。
归档时间: |
|
查看次数: |
1387 次 |
最近记录: |