2

我知道这是一个常见问题,但我在论坛中可以找到的所有内容似乎都与 64 位框架不兼容有关(在我的情况下这不是问题)。

我有一组使用 Votive 开发的简单 WIX 3.5 安装程序,我可以在 VS2010 中愉快地编译,但是当我尝试在 TeamCity(即 TeamCity -> Nant -> MSBuild -> WIX)上通过 NAnt(和 MSBuild)编译它们时,我得到了以下错误:

 [exec] Project file contains ToolsVersion="4.0", which is not supported by this 
            version of MSBuild. Treating the project as if it had ToolsVersion="3.5".
 [exec] Compile:
 [exec]   Microsoft (R) Windows Installer Xml Compiler version 3.5.2006.0
 [exec]   Copyright (C) Microsoft Corporation. All rights reserved.
 [exec]
 [exec]   Product.wxs
 [exec]   Product.Generated.wxs
 [exec] Link:
 [exec]   Microsoft (R) Windows Installer Xml Linker version 3.5.2006.0
 [exec]   Copyright (C) Microsoft Corporation. All rights reserved.
 [exec]
 [exec] light.exe : error LGHT0001: Unable to load DLL 'winterop.dll': The specified module 
           could not be found. (Exception from HRESULT: 0x8007007E)
 [exec]
 [exec]   Exception Type: System.DllNotFoundException
 [exec]
 [exec]   Stack Trace:
 [exec]      at Microsoft.Tools.WindowsInstallerXml.Cab.Interop.NativeMethods.ExtractCabBegin()
 [exec]      at Microsoft.Tools.WindowsInstallerXml.Binder.BindDatabase(Output output, String databaseFile)
 [exec]      at Microsoft.Tools.WindowsInstallerXml.Binder.Bind(Output output, String file)
 [exec]      at Microsoft.Tools.WindowsInstallerXml.Tools.Light.Run(String[] args)
 [exec] Done Building Project "c:\dev2\ad3\utilities\Installers\Database\Database.wixproj" (default targets) -- FAILED.
 [exec] Done Building Project "c:\dev2\ad3\AgentDesktop3.1.sln" (default targets) -- FAILED.
 [exec]
 [exec] Build FAILED.
 [exec]
 [exec] "c:\dev2\ad3\AgentDesktop3.1.sln" (default target) (1) ->
 [exec] "c:\dev2\ad3\utilities\InstallerService\InstallerService.csproj" (default target) (5) ->
 [exec] (ResolveAssemblyReferences target) ->
 [exec]   C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets
            : warning MSB3088: Could not read state file
            "obj\Release\ResolveAssemblyReference.cache". Unable to find assembly
            'Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral,
            PublicKeyToken=b03f5f7f11d50a3a'.
 [exec]
 [exec]
 [exec] "c:\dev2\ad3\AgentDesktop3.1.sln" (default target) (1) ->
 [exec] "c:\dev2\ad3\utilities\Installers\Database\Database.wixproj" (default target) (6) ->
 [exec] (Link target) ->
 [exec]   light.exe : error LGHT0001: Unable to load DLL 'winterop.dll': The specified 
              module could not be found. (Exception from HRESULT: 0x8007007E)
 [exec]
 [exec]     1 Warning(s)
 [exec]     1 Error(s)
 [exec]
 [exec] Time Elapsed 00:00:05.92

 BUILD FAILED

有任何想法吗?

4

4 回答 4

2

我们在使用 Team Build (2010) 构建时遇到了类似的问题。我们最终在我们的一个构建代理上为 winterop.dll 做了一个 filemon(它现在称为 processmonitor),以查看它的预期位置。

我们最终在我们的路径中添加了 wix 安装的 bin 文件夹,突然发现了 winterop.dll。

于 2010-08-18T14:34:07.000 回答
1

根据您的团队构建方式,您还可以添加一个重新映射 wix 目标、工具和路径的目标文件,然后设置“RunWixToolsOutOfProc”项目以在带外运行它。这是我的目标文件的一部分,它映射了三个路径。只需将初始属性更改为您通常放置 wix 文件的位置。

<CreateProperty Value="$(ProductDirRoot)\buildfiles\tasks\wix\">
  <Output TaskParameter="Value" PropertyName="WixToolPath"/>
  <Output TaskParameter="Value" PropertyName="WixExtDir"/>
</CreateProperty>

<CreateProperty Value="$(WixToolPath)wix.targets">
  <Output TaskParameter="Value" PropertyName="WixTargetsPath"/>
</CreateProperty>

<CreateProperty Value="$(WixToolPath)wixtasks.dll">
  <Output TaskParameter="Value" PropertyName="WixTasksPath"/>
</CreateProperty>

<!-- If we didn't find the registry path, assume we're in a 64bit process. -->
<!-- WiX tools are 32bit EXEs, so run them out-of-proc when MSBuild is 64bit. -->
<CreateProperty Value="true" Condition=" '$(MSBuildExtensionsPath64)' != '' ">
  <Output TaskParameter="Value" PropertyName="RunWixToolsOutOfProc" />
</CreateProperty>
于 2010-08-24T20:51:03.063 回答
0

您是否有可能没有正确设置工作目录?我假设您已经验证了 DLL 是否存在?

我还将安装 .NET 4.0 以删除警告 - 不妨将其作为潜在原因消除(个人无法想到任何简单的事情会导致它崩溃的原因)。也许作为中途之家,您可以将ToolsVersion背面更改为 3.5 ?

于 2010-08-18T07:29:31.810 回答
0

这听起来像是一个已知问题: http: //sourceforge.net/tracker/ ?func=detail&aid=3037918&group_id=105970&atid=642714

于 2010-08-18T22:55:48.110 回答