2010-08-18 4 views
2

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

У меня есть набор простых установщиков 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 

Любые идеи?

ответ

2

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

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

+0

Он перешел к другой проблеме со сборкой env, но я уверен, что подход к пути работал. Это ваше! –

+0

Я сделал то же самое, но он не работает. –

0

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

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

+0

Возможно, я смогу установить фреймворк 4 на какой-то будущей стадии, но (желая не проходить через кошмар Kafkaesque изменений). Я решил придерживаться рамки 3.5 на данный момент. Ваш ответ заставляет меня задаться вопросом, будет ли WIX env var выбран TC без перезапуска сервера? –

0

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

+0

Я видел эту нить (которая в основном «меня тоже!»), Но я не видел обходного пути в этом вопросе - можете ли вы предложить какой-либо способ справиться с этим? Вы видели такую ​​проблему с TC/CCNET? Эта проблема исправлена ​​в ночных сборках? Я готов переключиться на более сложные версии, если это приблизит меня к решению. –

+0

«Мне тоже!» Помогают нам расставить приоритеты по исправлению этой проблемы как можно быстрее. Наблюдайте за ошибкой, когда проблема действительно исправлена. –

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> 
Смежные вопросы