Здравствуйте!
Написал робота на последней версии S#. Использую Transaq Connector. Пытаюсь завернуть приложение в контейнер Docker. Локально, без контейнера, все работает отлично. Но при попытке соединения в приложении в контейнере выдает ошибку. Приходит exception на событие Connector.ConnectionError:
Error load library txmlconnector.dll. (Parameter 'dllPath')
at Ecng.Interop.Marshaler.LoadLibrary(String dllPath)
at Ecng.Interop.DllLibrary..ctor(String dllPath)
at #=z$v7B9Iu3PqOtBWiwGjTeuTIBQG7A..ctor(String #=zWUnOCRY=, #=zGon05jN$zqu0 #=z$SosFX8=)
at #=zfFAR89tKbzSwRbMRwZT08jN8htD7UjYzvw==..ctor(Action`1 #=z$SosFX8=, Action`1 #=zuVX1g4Bj32l1, String #=zWUnOCRY=, Boolean #=z1BrZqexflzIZ, Boolean #=zpNZ3xedpXleK, String #=zEYFvlw2lUDMt, ApiLogLevels #=z9eSLFMNKlQa7)
at StockSharp.Transaq.TransaqMessageAdapter.#=zAxO2KDE=()
at StockSharp.Transaq.TransaqMessageAdapter.OnSendInMessage(Message message)
at StockSharp.Messages.MessageAdapter.SendInMessage(Message message)
Dockerfile стандартный:
FROM mcr.microsoft.com/dotnet/runtime:5.0 AS base
WORKDIR C:/app
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR C:/src
COPY ["OrdersExecutor.csproj", ""]
RUN dotnet restore "./OrdersExecutor.csproj"
COPY . .
WORKDIR "C:/src/."
RUN dotnet build "OrdersExecutor.csproj" -c Release -o C:/app/build
FROM build AS publish
RUN dotnet publish "OrdersExecutor.csproj" -c Release -o C:/app/publish
FROM base AS final
WORKDIR C:/app
RUN dir
COPY --from=publish C:/app/publish .
ENTRYPOINT ["dotnet", "OrdersExecutor.dll"]
Пробовал запускать на разных runtime (nano, core), не помогает. Код, собранный в конейнере (и выдернутый из него), запускается на локальной машине отлично. Т.е. проблема именно в среде выполнения и методе загрузки txmlconnector.dll. Исходников Ecng.Interop, чтобы подсмотреть, у меня нет и я не знаю куда копать. Помогите!
Kommentare (5)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Автора первого полезного ответа ждет вознаграждение.
Такая же ошибка возникает если завернуть приложение в UWP Попробуйте жестко задать путь к txmlconnector.dll https://doc.stocksharp.ru/html/P_StockSharp_Transaq_TransaqMessageAdapter_DllPath.htm
Спасибо за наводку!
Но не помогло. Попробовал принудительно задать абсолютный и относительные пути, разные варианты с косыми и прямыми чертами, пробовал заранее копировать dll в контейнер. Не помогло :(.
Еще может надо копать в сторону Docker + C++ MSVC, так как есть подозрение что transaqxml.dll это использует. https://devblogs.microsoft.com/cppblog/using-msvc-in-a-docker-container-for-your-c-projects/ Но я не знаю и сам не пробовал.
Кстати, я даже попробовал установить все версии vcredist в контейнер, не помогло.