我打开了一个Web核心API与. NET 6通过Visual Code 2022。我添加了以下行,它是正确的工作在我的本地,但当我试图运行它在我的码头桌面崩溃。代码使用此包:"TitaniumAS. Opc.客户端.核心.设计"
TitaniumAS.Opc.Client.Bootstrap.Initialize();
Uri url = UrlBuilder.Build("Graybox.Simulator.1");
using (var server = new OpcDaServer(url))
{
server.Connect();
OpcDaGroup group = server.AddGroup("MyGroup");
group.IsActive = true;
var definition1 = new OpcDaItemDefinition
{
ItemId = "numeric.random.int64",
IsActive = true
};
var definition2 = new OpcDaItemDefinition
{
ItemId = "numeric.random.int32",
IsActive = true
};
OpcDaItemDefinition[] definitions = { definition1, definition2 };
OpcDaItemResult[] results = group.AddItems(definitions);
foreach (OpcDaItemResult result in results)
{
if (result.Error.Failed)
Console.WriteLine("Error adding items: {0}", result.Error);
}
while (true)
{
OpcDaItemValue[] values = group.Read(group.Items, OpcDaDataSource.Device);
Console.WriteLine("Value is {0}", Convert.ToString(values[0].Value));
Thread.Sleep(3000);
}
停靠文件:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 5045
ENV ASPNETCORE_URLS=http://+:5045
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["OPC-DA.csproj", "./"]
RUN dotnet restore "OPC-DA.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "OPC-DA.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "OPC-DA.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "OPC-DA.dll"]
我还把我的docker-desktop目标切换为windows。当运行行时,它会因为第一行而崩溃。
错误:
失败:Microsoft. AspNetCore.服务器. Kestrel [13]连接ID "0HMN2H4AOJ5LQ",请求ID "0HMN2H4AOJ5LQ:应用程序引发了未经处理的异常。System.DllNotFoundException:无法加载共享库"ole32.dll"或它的某个依赖项。为了帮助诊断加载问题,请考虑设置LD_DEBUG环境变量:libole32.dll:无法打开共享目标文件:无此文件或目录
1条答案
按热度按时间slmsl1lt1#
我假设这是您在项目中引用的NuGet包:https://www.nuget.org/packages/TitaniumAS.Opc.Client。该包是为.NET Framework而不是.NET Core构建的。您的构建输出可能会显示有关该事实的警告。类似于:
从.NET Core调用.NET Framework程序集 * 可以 * 工作,但不能保证一定能工作。
下一个问题与目标平台有关。由于Titanium程序集是用于.NET Framework的,因此它只能在Windows上运行。根据您提供的错误消息,看起来你的目标是Linux容器。由于这个Titanium的依赖性,这是行不通的。它试图找到一个Windows DLL,显然在Linux上不存在。相反,你会希望目标是Windows容器。因此,您首先需要更新Docker桌面以针对Windows容器。
你不需要改变你的Dockerfile,你使用的标签
6.0
是动态的,可以在Linux和Windows上使用,根据你的目标容器平台类型给你合适的映像。