Я написал пакет 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
1720391435
Anonymous
Я написал пакет 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"
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78715038/cant-find-so-file-in-nuget-package-when-deployed-via-docker[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия