C#和#x2B中的Windows服务;C++;拒绝从Docker开始

C#和#x2B中的Windows服务;C++;拒绝从Docker开始,c#,c++,wcf,docker,managed-c++,C#,C++,Wcf,Docker,Managed C++,我在VS 2017中创建了一个解决方案,其中包括两个主要项目和常见项目。该体系结构说明了一个非常大的遗留项目,因此无法更改。 主项目是一个.Net可执行文件,它的主类继承自“ServiceBase”类,以便用作Windows服务。它定义WCF端点并使用接口“IWcfXmlServer”来处理请求。 另一个项目是C++项目,它具有实现“IWCFxMLSServer”接口并用于处理请求的类。 我已经在本地创建了一个Windows服务,并将其指向解决方案的.exe文件,它运行良好 下一步是将该应用程序

我在VS 2017中创建了一个解决方案,其中包括两个主要项目和常见项目。该体系结构说明了一个非常大的遗留项目,因此无法更改。 主项目是一个.Net可执行文件,它的主类继承自“ServiceBase”类,以便用作Windows服务。它定义WCF端点并使用接口“IWcfXmlServer”来处理请求。 另一个项目是C++项目,它具有实现“IWCFxMLSServer”接口并用于处理请求的类。 我已经在本地创建了一个Windows服务,并将其指向解决方案的.exe文件,它运行良好

下一步是将该应用程序放在Docker容器上。 我添加了Docker支持,添加了“Docker compose”.yml文件:

version: '3.4'

services:
  wcfservice:
    image: ${DOCKER_REGISTRY}wcfservice
    build:
      context: .\..\WcfService
      dockerfile: Dockerfile
和Dockerfile:

FROM microsoft/dotnet-framework:4.7.1-windowsservercore-1709
ARG source
WORKDIR /app
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["C:\\app\\WcfService.exe"]
当我构建解决方案并开始调试时,我得到:

无法从命令行或调试器启动服务。必须首先安装Windows服务(使用installutil.exe),然后使用ServerExplorer、Windows服务管理工具或NET START命令启动

但容器还是被创建了

我在创建的Docker容器中打开了PowerShell,并使用“新服务”创建了一个新服务,并将其指向我的.exe文件。当我尝试运行启动服务时,我得到一个错误

我使用Windows事件日志获取错误描述:

EntryType:错误 消息:无法启动服务。System.Reflection.TargetInvocationException:调用的目标已引发异常。-->System.IO.FileNotFoundException:无法加载文件或 程序集“testole.dll”或其依赖项之一。找不到指定的模块。 在WcfService.WcfXmlServerFacade..ctor()上 ---内部异常堆栈跟踪的结束--- 位于System.RuntimeMethodHandle.InvokeMethod(对象目标、对象[]参数、签名符号、布尔构造函数) 在System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr、Binder Binder、Object[]参数、CultureInfo区域性) 位于System.ServiceModel.Description.ServiceDescription.CreateImplementation(类型serviceType) 位于System.ServiceModel.Description.ServiceDescription.SetupSingleton(ServiceDescription ServiceDescription,对象实现,布尔值是众所周知的) 位于System.ServiceModel.Description.ServiceDescription.GetService(类型serviceType) 在System.ServiceModel.ServiceHost.CreateDescription(IDictionary`2&implem。。。 资料来源:WcfService1

    Testle.dll是我编译的C++项目。 **我已经检查了“testole.dll”是否存在于容器中.exe文件的同一目录中

我不能弄清楚为什么它不能运行C++ DLL,也不能知道如何获得更多关于错误的信息(控制台。


提前感谢。

你很可能错过了VisualC++重新分发包。我怀疑它没有在Windows DOCKER映像上默认安装。

尝试将以下行(用于下载VC++2015更新3 x64)添加到Dockerfile中,该文件位于
FROM
行下方:

ADD https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe /vc_redist.x64.exe
RUN C:\vc_redist.x64.exe /quiet /install

Source()

如消息所述,testole.dll本身可以引用其他程序集(并以递归方式)这是不可用的。@ SimonMourier -伟大的方向检查。我有:<代码>使用了< <代码> >在C++ DLL中的一个文件中。我将尝试找出它并将更新。这两个应该在这里,它们是.NETFramework的核心。查看外部库(.LIB,A)在C++项目中,或者您也可以直接在.dll或.dll上使用“依赖”工具。exes@SimonMourier。谢谢你的帮助。我仍然不知道问题出在哪里。我尝试过该工具,但它无法解决所有依赖项,而且太混乱。有什么方法可以让我在尝试启动时获得有关异常的更多信息Docker中的服务?我对Docker一无所知,但我想可能有一些组件通常存在于每个窗口中,而不是您的Docker环境中。