Windows Service: System.Reflection.ReflectionTypeLoadExcepti

本文关键字:Reflection ReflectionTypeLoadExcepti System Service Windows | 更新日期: 2023-09-27 18:35:11

我正在使用一个Windows服务,其中我有一个程序集的引用,它是copylocal= false。但是我正在尝试在运行时加载它,尽管当我从 Visual Studio 运行它时它时工作正常,但是当我尝试安装它时,cmd 会给出此错误:

An exception occurred while trying to find the installers in the D:'Official'Pro
jects'20131007_ImproveDN'build'debug'application
s'SubscriptionService'SubscriptionService.exe assembly.
System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the
 requested types. Retrieve the LoaderExceptions property for more information.
Aborting installation for D:'Official'Projects'2
0131007_ImproveDN'build'debug'applications'SubscriptionService'SubscriptionServi
ce.exe.
An exception occurred during the Rollback phase of the System.Configuration.Inst
all.AssemblyInstaller installer.
System.InvalidOperationException: Unable to get installer types in the D:'Offici
al'Projects''20131007_ImproveDN'build'debug'appli
cations'SubscriptionService'SubscriptionService.exe assembly.
The inner exception System.Reflection.ReflectionTypeLoadException was thrown wit
h the following error message: Unable to load one or more of the requested types
. Retrieve the LoaderExceptions property for more information..
An exception occurred during the Rollback phase of the installation. This except
ion will be ignored and the rollback will continue. However, the machine might n
ot fully revert to its initial state after the rollback is complete.

这里还要注意的一件事是,如果我将副本复制到本地,.dll它会使安装正常。BUt 我不想在安装之前加载它,所以我想在运行时加载它。

提前谢谢。

Windows Service: System.Reflection.ReflectionTypeLoadExcepti

也许你需要使用另一个版本的 InstallUtil.exe:

  • c:''Windows''Microsoft.NET''Framework''v2.0.50727''InstallUtil.exe
  • c:''Windows''Microsoft.NET''Framework''v4.0.30319''InstallUtil.exe
  • c:''Windows''Microsoft.NET''Framework64''v2.0.50727''InstallUtil.exe
  • c:''Windows''Microsoft.NET''Framework64''v4.0.30319''InstallUtil.exe

尝试使用 Framework64 子文件夹中的 x64 版本。

这里还要注意的一件事是,如果我将副本复制到本地,.dll它会使安装正常。BUt 我不想在安装之前加载它,所以我想在运行时加载它。

这并不重要,程序集仍然需要进入安装目录。如果将Copy Local设置为 false ,则仍需要随安装一起分发程序集。

我也有类似的问题。 我做了以下对我有用的事情。

  • 首先,使用 FuseLog(程序集绑定查看器)找出绑定失败的位置(此处描述

  • 一旦我开始获取日志,我注意到我的日志中是"无效的汇编平台或文件中的 ContentType (hr = 0x8007000b)"。

  • 我的解决方案由 3 个项目组成。 我浏览了每个项目的构建属性,并注意到其中一个以"x86"为目标。 我将其更改为"任何CPU",重新编译,问题已解决。