WIX 3.5 не работает под NAnt, но не под VS2010 - PullRequest
2 голосов
/ 18 августа 2010

Я знаю, что это распространенная проблема, но все, что я могу найти на форумах, похоже, связано с несовместимостью 64-битных фреймворков (в моем случае это не проблема).

У меня есть набор простыхУстановщики WIX 3.5, разработанные с использованием Votive, которые я могу скомпилировать счастливо в VS2010, но когда я пытаюсь скомпилировать их с помощью NAnt (и MSBuild) в TeamCity (то есть 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

Есть идеи?

Ответы [ 4 ]

2 голосов
/ 18 августа 2010

У нас была похожая проблема при сборке с использованием Team Build (2010). В итоге мы выполнили команду filemon (в наши дни он называется processmonitor) для winterop.dll на одном из наших агентов сборки, чтобы увидеть, где он ожидался.

Мы закончили тем, что добавили в наш каталог папку bin установки wix, и внезапно был обнаружен winterop.dll.

1 голос
/ 25 августа 2010

В зависимости от того, как вы строите свою команду, вы также можете добавить целевой файл, который повторно сопоставляет цели, инструменты и пути 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>
0 голосов
/ 19 августа 2010

Это звучит как известная проблема: http://sourceforge.net/tracker/?func=detail&aid=3037918&group_id=105970&atid=642714

0 голосов
/ 18 августа 2010

Есть ли вероятность, что вы не устанавливаете рабочий каталог правильно?Я предполагаю, что вы проверили, есть ли DLL?

Я бы также установил .NET 4.0, чтобы удалить предупреждение - может также устранить это как потенциальную причину (лично не могу придумать причину, почемупросто приведет к его поломке).Возможно, в качестве дома на полпути вы могли бы изменить ToolsVersion обратно на 3,5?

...