Я написал пакет nuget, который использует скомпилированный код Rust, и хочу иметь возможность использовать этот пакет как в Linux, так и в Windows. Я скомпилировал код ржавчины в файлы .dll и .so и включил оба в пакет nuget. Включение пакета nuget в мой основной проект .net и локальное тестирование в Windows работает нормально. Проблема возникает, когда я развертываю свой основной проект .net в контейнере докеров на своем веб-сервере на базе Linux. Всякий раз, когда вызывается какой-либо код в пакете nuget, требующий .so, я получаю исключение:
Unable to load shared library 'opaque' or one of its dependencies. In order to help diagnose loading problems, consider using a tool like strace. If you're using glibc, consider setting the LD_DEBUG environment variable:
/usr/share/dotnet/shared/Microsoft.NETCore.App/8.0.4/opaque.so: cannot open shared object file: No such file or directory
/app/opaque.so: cannot open shared object file: No such file or directory
/usr/share/dotnet/shared/Microsoft.NETCore.App/8.0.4/libopaque.so: cannot open shared object file: No such file or directory
/app/libopaque.so: cannot open shared object file: No such file or directory
/usr/share/dotnet/shared/Microsoft.NETCore.App/8.0.4/opaque: cannot open shared object file: No such file or directory
/app/opaque: cannot open shared object file: No such file or directory
/usr/share/dotnet/shared/Microsoft.NETCore.App/8.0.4/libopaque: cannot open shared object file: No such file or directory
/app/libopaque: cannot open shared object file: No such file or directory
Эту ошибку довольно легко понять, я просто не знаю, как ее исправить. Я почти уверен, что эта проблема связана с развертыванием через Docker, поскольку обычно кажется, что пакеты nuget, установленные в Linux, будут помещены в каталог /share/, поэтому он пытается найти его там. Я предполагаю, что установка пакета nuget из контейнера Docker предотвращает это.
Кто-нибудь знает, как это исправить? Либо указать другой путь, либо мой пакет nuget каким-то образом установлен в правильный каталог?
Я ссылаюсь на dll через атрибут следующим образом:
[DllImport("opaque")]
Структура пакета nuget выглядит следующим образом:
project/
.dll
.so
.csproj
Вот как я указываю .dll и .so в файле проекта
True
lib\$(TargetFramework)
Always
True
lib\$(TargetFramework)
Always
Я попробовал этот ответ здесь, но не смог заставить его работать. Я также попытался изменить для файла .so в файле пакета на app/, но это не сработало.
Файл Docker выглядит так этот. Пакет nuget включен в проект STS
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /app
# copy csprojs and restore as distinct layers
WORKDIR /src
COPY ["./STS/STS.csproj", "STS/"]
COPY ["./Business/Business.csproj", "Business/"]
RUN dotnet restore "STS/STS.csproj"
# copy everything else and build
COPY . ./
WORKDIR "/src/STS"
RUN dotnet build "STS.csproj" -c Release -o /app/build -r linux-x64
FROM build AS publish
RUN dotnet publish "STS.csproj" -c Release -o /app/out -r linux-x64
# build runtime image
FROM mcr.microsoft.com/dotnet/sdk:8.0
WORKDIR /app
COPY --from=publish /app/out .
ENTRYPOINT ["dotnet", "STS.dll"]
project.asset.json
"Vaultic.OPAQUE.Net/1.1.13": {
"type": "package",
"compile": {
"lib/net8.0/OPAQUE.Net.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net8.0/OPAQUE.Net.dll": {
"related": ".xml"
}
},
"runtimeTargets": {
"runtimes/linux-x64/native/libopaque.so": {
"assetType": "native",
"rid": "linux-x64"
},
"runtimes/win-x64/native/opaque.dll": {
"assetType": "native",
"rid": "win-x64"
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... via-docker
Невозможно найти файл .so в пакете nuget при развертывании через Docker. ⇐ Linux
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Невозможно найти файл .so в пакете nuget при развертывании через Docker.
Anonymous » » в форуме Linux - 0 Ответы
- 25 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как добавить конфигурацию из файла в пакете NuGet в конфигурацию проекта при его импорте?
Anonymous » » в форуме C# - 0 Ответы
- 96 Просмотры
-
Последнее сообщение Anonymous
-
-
-
С# при развертывании как пакет nuget простой расчет дает неверные результаты
Anonymous » » в форуме C# - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-