C# Windows服务:模块应包含程序集清单

C# Windows服务:模块应包含程序集清单,c#,windows-services,C#,Windows Services,我有一个C#程序,它是作为Windows服务构建的。上周我测试了这个,效果很好,但今天我发现了一个错误 当我尝试使用installutil.exe安装时,出现以下错误: 无法加载文件或程序集[文件名]或其依赖项之一。模块应包含程序集清单 重建项目没有任何效果。我还注意到,在TaskManager中,该服务仍在列出并运行。可能会干扰安装,我尝试通过installutil卸载,但再次收到相同的错误消息 我见过许多其他与这个错误相关的问题,但大多数问题要么没有答案,要么与他们的独特情况相关的非常具体的

我有一个C#程序,它是作为Windows服务构建的。上周我测试了这个,效果很好,但今天我发现了一个错误

当我尝试使用installutil.exe安装时,出现以下错误:

无法加载文件或程序集[文件名]或其依赖项之一。模块应包含程序集清单

重建项目没有任何效果。我还注意到,在TaskManager中,该服务仍在列出并运行。可能会干扰安装,我尝试通过installutil卸载,但再次收到相同的错误消息

我见过许多其他与这个错误相关的问题,但大多数问题要么没有答案,要么与他们的独特情况相关的非常具体的答案。有人发生过这种情况吗?你是怎么解决的?欢迎提出任何意见

更新:

我通过命令提示符使用“sc delete”命令成功卸载了该服务,但在尝试重新安装时,installutil仍会出现相同的错误

更新2:

只是为了尝试一些东西,我从项目中删除了bin文件夹,重新打开了解决方案,并进行了清理和构建。它仍然无法安装,但现在我收到了一条不同的消息:

此程序集由比当前加载的运行时更新的运行时生成,因此无法加载

问题:

什么会导致运行时不匹配?据我所知,我只使用了.NETFramework4.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打交道,除非这是唯一的方法(上次是噩梦)


我尝试在目标服务器(它最终将部署到的机器)上安装该服务,但得到了相同的错误。这让我认为这是项目/解决方案的问题,而不是pc的问题。

看起来像是程序集加载问题。使用该实用程序。从VisualStudio命令提示符启动它。单击设置按钮,然后单击“将绑定失败记录到磁盘”单选按钮。切换回VS并启动程序,等待异常发生。返回Fuslogvw,单击刷新按钮并双击添加的条目。它将向您显示它找到的文件


另一种可能是尝试加载带有请求CLR版本2的EXE的.NET 4程序集。这需要一个app.exe.config文件来强制使用CLR 4。

32/64位差异?@Lloyd:这是一个64位系统上的64位程序。另外,它和以前运行的是同一台机器。当服务运行时,为什么要运行installutil.exe???@HansPassant:你具体想问什么?我最初在尝试安装时没有意识到它正在运行。当我注意到它时,我停止了服务并尝试卸载。有没有其他方法可以不使用installutil进行卸载?好的,我现在正在用fuslogvw.exe进行卸载,但双击时它不会显示任何文件。我不知道这是否重要,但我无法从visual studio运行该程序,因为它是windows服务。将fuslogvw与installutil一起使用似乎不会产生结果。您必须以管理员权限运行fuslogvw.exe。使用installutil.exe安装服务时将其保持打开状态。然后,单击fuslogvw.exe中的“刷新”按钮以加载信息。如果要查看完整报告,请单击“查看日志”。希望这能帮上忙。我又试了一次,但现在点击刷新按钮就看不到任何应用程序。