繁体   English   中英

将应用程序作为Windows服务运行时的汇编文件加载错误

[英]assembly file load error when running application as windows service

我有一个配置为在控制台上运行或作为服务运行的应用程序(取决于我是手动运行还是安装.exe)。

从命令行运行它效果很好...但是当我将其作为服务安装时,出现文件加载错误:

System.IO.FileLoadException: Could not load file or assembly 'Microsoft.EntityFrameworkCore.Relational, Version=2.2.0.0'  ... the located assembly's manifest definition does not match the assembly reference.

这个包是必需的,因为我正在使用EntityFrameworkCore和Pomelo库来查询MySQL数据库。 我已确保所有必需的NuGet软件包均已包含并且是最新的。

我已经做了一些事情来纠正此错误,老实说看不到我所缺少的...

首先,我的程序从一开始就运行此行,以确保服务从我期望的目录(而不是system32)运行:

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);

接下来,我尝试将特定的程序包还原到v2.0.0.0以匹配错误说明...不过,尽管我使用还原后的程序包构建了该程序包,但其他程序包却抛出错误,他们正在寻找更新的版本v2.2.6。 0

我也尝试过删除生产机器上所有对v2.0.0.0的引用...因此它甚至都不需要

我的.csproj文件仅引用最新版本:

<Reference Include="Microsoft.EntityFrameworkCore.Relational, Version=2.2.6.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
  <HintPath>packages\Microsoft.EntityFrameworkCore.Relational.2.2.6\lib\netstandard2.0\Microsoft.EntityFrameworkCore.Relational.dll</HintPath>
</Reference>

我什至在我的app.config文件中甚至有一个绑定重定向,它似乎被完全忽略了:

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.EntityFrameworkCore.Relational" publicKeyToken="adb9793829ddae60" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.2.6.0" newVersion="2.2.6.0" />
  </dependentAssembly>

现在,我对可能丢失的内容一无所知...如上所述,当作为服务运行时,我只会遇到文件丢失错误...

当作为服务运行时,为什么我的应用程序找不到合适的程序集版本? 我该如何解决该问题?

您是否尝试过以“普通”帐户运行服务/应用程序? 尝试输入可交互登录的帐户,然后在服务的“登录”选项卡上运行该应用程序:

在此处输入图片说明

(在命令提示符处运行“ whoami”以找到您的帐户名。)

老实说,我仍然不确定为什么会这样,但是我找到了解决方案...

据我所知,问题确实与NuGet软件包的描述不够有关。

基本上,发生的事情是我使用的软件包声明它可以使用任何版本的Microsoft.EntityFrameworkCore.Relational ,只要它是2.2.0.0或更高版本即可。 NuGet建议更新到最新版本,所以我做到了……碰巧是2.2.6.0。 此更新破坏了它...

因此,恢复到2.2.0.0并删除绑定重定向解决了我的问题。 这两项工作都必须完成,因为仅还原到较早版本并不能解决绑定重定向迫使它寻找较新版本的问题...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM