我知道这是一个常见问题,但我在论坛中找到的所有内容似乎都与64位框架不兼容性有关(在我的情况下这不是问题)。
我有一组使用Votive开发的简单WIX 3.5安装程序,我可以在VS2010中愉快地编译,但是当我尝试通过TeamCity上的NAnt(和MSBuild)编译它们时(即TeamCity - > Nant - > MSBuild - > WIX)我收到以下错误:
[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
有什么想法吗?
答案 0 :(得分:2)
使用Team Build(2010)构建时,我们遇到了类似的问题。我们最终在我们的一个构建代理上为winterop.dll做了一个filemon(现在称为processmonitor)来查看它的预期位置。
我们最终在路径中添加了wix安装的bin文件夹,突然发现了winterop.dll。
答案 1 :(得分: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>
答案 2 :(得分:0)
您是否有可能没有正确设置工作目录?我假设你已经验证了DLL存在吗?
我还会安装.NET 4.0来删除警告 - 也可以将其作为潜在原因消除(不能个人想到任何直接导致它破坏的原因)。也许作为一个中途的房子你可以将ToolsVersion
改回3.5?
答案 3 :(得分:0)