【问题标题】:assembly file load error when running application as windows service将应用程序作为 Windows 服务运行时程序集文件加载错误
【发布时间】:2019-12-25 03:51:33
【问题描述】:

我有一个应用程序配置为在控制台上运行或作为服务运行(取决于我是手动运行 .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>

现在我对我可能丢失的内容感到非常茫然...如上所述,我只在作为服务运行时收到文件丢失错误...

为什么我的应用程序在作为服务运行时找不到正确的程序集版本?我该如何解决这个问题?

【问题讨论】:

  • 它可能正在尝试从 GAC 加载程序集。您可以尝试在完全控制台模式下运行它,而不是在 Visual Studio 中。

标签: c# mysql windows-services entity-framework-core .net-assembly


【解决方案1】:

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

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

【讨论】:

  • 是的,事实上这就是我一直在做的事情,但我也尝试过作为本地服务运行......这两个选项都不起作用
【解决方案2】:

老实说,我仍然不完全确定为什么会发生这种情况,但我找到了解决方案......

据我所知,问题确实与 NuGet 包的描述性不足有关。

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

所以恢复到 2.2.0.0 并删除绑定重定向解决了我的问题。这两件事都必须完成,因为仅恢复到早期版本并不能解决绑定重定向迫使它寻找更高版本...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    相关资源
    最近更新 更多