【发布时间】:2015-03-27 22:35:31
【问题描述】:
我有一个作为 Windows 服务构建的 C# 程序。我上周进行了测试,它运行良好,但今天我遇到了错误。
当我尝试使用 installutil.exe 进行安装时,出现错误:
无法加载文件或程序集 [文件名] 或其依赖项之一。该模块应包含程序集清单。
重建项目没有效果。我还在任务管理器中注意到该服务仍在列出并运行。在可能会干扰安装的情况下,我尝试通过 installutil 卸载,但再次收到相同的错误消息。
我见过许多与此错误相关的其他问题,但大多数问题要么没有答案,要么没有与他们的独特情况相关的非常具体的答案。有没有人发生过这种情况,你是如何解决的?任何想法都表示赞赏。
更新:
我通过命令提示符使用“sc delete”命令成功卸载了服务,但在尝试重新安装时我仍然从 installutil 中收到相同的错误。
更新 2:
只是为了尝试一些东西,我从项目中删除了 bin 文件夹,重新打开了解决方案,然后进行了清理和构建。它仍然无法安装,但现在我收到了不同的消息:
此程序集由比当前加载的运行时更新的运行时构建,无法加载。
问题:
什么会导致运行时不匹配?据我所知,我只使用过 .NET Framework 4.5 并没有偏离。是否有我应该查看/更改以解决此问题的值?
更新 3:
这是我迄今为止尝试过的:
一个答案表明正在使用的 installutil 版本很重要。我一直在运行 v2.0.50727,但还有一个我没想过要尝试的 v4.0.30319。运行结果:
试图加载格式不正确的程序...
我愿意改用那个错误,如果它会解决问题。但是,我不得不认为这不是问题,因为在第一个错误弹出之前我已经成功运行了 v2.0.etc。
在 App.config 中,有一行“supported Runtime version=v4.0”。我把这个改成 4.5,但效果好坏都没有。
我尝试将目标框架(在项目属性下)切换到 4.0,但这会导致错误:
一些 NuGet 包是使用与当前目标框架不同的目标框架安装的,等等...
这是指 EntityFramework,我宁愿不再开始使用 NuGet,除非它是唯一的方法(上次它是一场噩梦)。
我尝试在目标服务器(它最终将被部署到的机器)上安装该服务并得到同样的错误。这让我认为这是项目/解决方案的问题,而不是电脑的问题。
【问题讨论】:
-
32/64 位差异?
-
@Lloyd:这是 64 位系统上的 64 位程序。另外,它是之前运行的同一台机器。
-
为什么服务运行的时候还运行installutil.exe???
-
@HansPassant:你具体要问什么?我最初没有意识到它在尝试安装时正在运行。当我注意到它时,我停止了服务并尝试卸载。有没有其他不使用 installutil 的卸载方式?
标签: c# windows-services