当Windows服务安装程序弹出“错误1001.无法获取MyService.exe程序集中的安装程序类型”时。所以它无法加载MyServiceInstaller。 Fusion日志记录显示我在尝试查找Data.dll程序集时失败了。
问题是,它不应该加载Data.dll来创建我的服务安装程序对象。我认为直到调用包含这些类型的方法之前才触发类型加载。一些MyServiceInstaller方法引用Data.dll中的类型,但不引用任何ctor。
就像加载MyService.exe或探测MyServiceInstaller一样,调用Data.dll的加载。
据我所知,融合日志记录不会告诉我我需要知道什么。那时已经太晚了。我需要知道加载MyServer.exe或者首先触发加载Data.dll的MyServiceInstaller的探测是什么。
有一项业务要求,无法将Data.dll放在MyService.exe旁边。事实上,这确实解决了这个问题。我有一个自定义AssemblyResolve事件,它在正常运行时加载Data.dll。
答案 0 :(得分:1)
尝试将调试器附加到安装程序并在抛出异常时使其中断(您可以在Visual Studio中的Debug / Exceptions中进行设置)。通常情况下,当程序集加载失败时,安装程序内部应该有一个FileNotFoundException或类似的东西,这可能会在其他地方被捕获但是如果在被抛出时使调试器中断(并且不当它未处理时)你可以介入并获得一个堆栈跟踪,它可以帮助你发现究竟是什么原因造成的问题。
你应该在堆栈跟踪中看到类似的内容:
[Uninteresting native and / or external code]
SomeClassInYourInstaller.SomeMethod() <-- this is the responsible method
SomeOtherStuff.SomeMethod()
...etc...
答案 1 :(得分:0)
可能存在Data.dll中定义的类型的实例变量(字段);加载MyServiceInstaller时,所有字段的类型都需要可用,即使它们未被使用,因为如果创建了实例,则正在编译该类。