.NET 4 Windows服务安装升级错误

.NET 4 Windows服务安装升级错误,.net,windows,service,installation,.net,Windows,Service,Installation,我有一个.NET 3.5 Windows服务,它是使用VS2008安装和部署项目安装的。它有一个自定义安装操作。在我最近升级到VS2010/.NET 4之前,这项服务的安装一直很有效。现在,当我升级到新版本时,出现安装错误:“错误1001…BadImageFormatException:无法加载文件或程序集…此程序集是由比当前加载的运行时更新的运行时生成的…”。如果我卸载以前的版本,然后安装新版本,一切正常…没有错误。安装正在我的开发机器上执行,因此.NET4框架已经存在 我启用了Fusion日

我有一个.NET 3.5 Windows服务,它是使用VS2008安装和部署项目安装的。它有一个自定义安装操作。在我最近升级到VS2010/.NET 4之前,这项服务的安装一直很有效。现在,当我升级到新版本时,出现安装错误:“错误1001…BadImageFormatException:无法加载文件或程序集…此程序集是由比当前加载的运行时更新的运行时生成的…”。如果我卸载以前的版本,然后安装新版本,一切正常…没有错误。安装正在我的开发机器上执行,因此.NET4框架已经存在

我启用了Fusion日志记录并发现了一个错误文件(见下文)。.NET2.0框架正在加载服务“ServerService.exe”,但我不确定这是为什么。安装中的其他文件由4.0框架加载。有人对如何解决这个问题或我如何进一步调查这个问题有什么建议吗

该项目以.NET 4.0 framework为目标,my app.config包含以下行:

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>

谢谢,
史蒂夫


融合日志:

Assembly Binder Log Entry  (3/11/2011 @ 2:44:03 PM)

The operation failed.
Bind result: hr = 0x8013101b. No description available.

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable  C:\Windows\syswow64\MsiExec.exe
--- A detailed error log follows.

=== Pre-bind state information ===
LOG: User = NT AUTHORITY\SYSTEM
LOG: Where-ref bind. Location = C:\Program Files (x86)\Server\ServerService.exe
LOG: Appbase = file:///C:/Windows/syswow64/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = NULL
Calling assembly : (Unknown).
===<br>
LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: No application configuration file found.
LOG: Using host configuration file: C:\Users\Steve\AppData\Local\Temp\CFG94A5.tmp
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Server/ServerService.exe.
LOG: Assembly download was successful. Attempting setup of file: C:\Program Files (x86)\Server\ServerService.exe
LOG: Entering run-from-source setup phase.
ERR: Error extracting manifest import from file (hr = 0x8013101b).
ERR: Failed to complete setup of assembly (hr = 0x8013101b). Probing terminated.**
装配活页夹日志条目(2011年11月3日下午2:44:03)
操作失败。
绑定结果:hr=0x801310b。没有可用的描述。
从以下位置加载的程序集管理器:C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
在可执行文件C:\Windows\syswow64\MsiExec.exe下运行
---下面是详细的错误日志。
==预绑定状态信息===
日志:User=NT AUTHORITY\SYSTEM
LOG:ref绑定的地方。位置=C:\ProgramFiles(x86)\Server\ServerService.exe
日志:Appbase=file:///C:/Windows/syswow64/
日志:初始PrivatePath=NULL
日志:Dynamic Base=NULL
日志:缓存基=NULL
日志:AppName=NULL
正在调用程序集:(未知)。
==
日志:此绑定在LoadFrom加载上下文中启动。 警告:将不会在LoadFrom上下文中探测本机映像。本机映像将仅在默认加载上下文中进行探测,如Assembly.load()。 日志:未找到应用程序配置文件。 日志:使用主机配置文件:C:\Users\Steve\AppData\Local\Temp\CFG94A5.tmp 日志:使用C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config中的计算机配置文件。 日志:正在尝试下载新URLfile:///C:/Program 文件(x86)/Server/ServerService.exe。 日志:程序集下载成功。正在尝试安装文件:C:\Program Files(x86)\Server\ServerService.exe 日志:进入从源代码运行安装阶段。 错误:从文件中提取清单导入时出错(hr=0x801310b)。 错误:未能完成程序集的设置(hr=0x801310B)。调查结束了**
当我从应用程序中删除自定义操作时,升级工作正常,所以我想我已经确定了问题的根源。

< P>我有一个非托管C++ exe通过COM.< /P>调用.NETDLL。 这里需要提到的是,上面列出的
..
块需要添加到
foo.exe.config
,以及
app.config
(其中
foo.exe
是您的可执行文件)。配置文件需要存在于安装目录中


我得到了完全相同的错误,因为FUSLOGVW显示Windows正在加载.NET2框架,尽管我是根据.NET4编译的。我已经格式化了我的
app.config
,但这还不够。

请看一下这个问题:卸载自定义操作正在运行旧的应用程序。这可能是问题的一部分。还要检查的另一件事是MSI的版本号是否更改,以及exe/dll文件上的程序集版本是否更改?(如果它们是相同的版本,它们可能不会被替换,因此旧文件仍然存在)是的,我倾向于同意卸载自定义操作似乎是问题的根源。不幸的是,我不知道如何超越我所处的位置来进一步解决这个问题。安装项目的version属性(以及ProductCode属性)已增加。在查看安装的目标文件夹时,我看到所有文件都更新为新版本,然后出现BadImageFormatException错误。这就好像卸载自定义操作是在复制文件后执行的,但在.NET 2.0框架下运行(即,它正在尝试加载新版本的服务)。程序集版本是否更改?这可能会有所不同。是的,卸载的顺序并不是你所期望的(事实上,包括我在内的许多人都竭尽全力通过使用带有脚本的构建后操作来修改MSI表,将其恢复到原来的顺序)。如果这是这个问题的正确答案,你可以继续并将其标记为答案。这样做没有惩罚,也不会出现在未回答的问题列表中。