Программа установки Visual Studio WiX, удаляющая вывод msi при перестройке - PullRequest
3 голосов
/ 25 января 2012

Я унаследовал проект WiX от недавно ушедшего подрядчика.

Когда я собираю проект установщика WiX, проблем нет - файл .msi создается и выводится, как и ожидалось.

Но когда я "перестраиваю" проект установщика WiX, снова .msi создается очень просто с помощью light.exe, но впоследствии он удаляется с помощью "CoreClean".

Дополнительная информация: проект wix упаковывает (и ссылается) один веб-проект.

Это фрагмент вывода:

ICE105: ICE105 - Validates the package to make sure that it can be installed in true Per-User mode
        ICE105: Created 05/01/2008. Last Modified 05/21/2008.
        Laying out media.
        Moving file 'C:\Users\codemonkey\AppData\Local\Temp\nxkfdvui\AmazonWebsiteInstaller.msi' to 'C:\web\main\Amazon.Webby.Install\bin\Release\AmazonWebsiteInstaller.msi'.
    Done executing task "Light".
    ...
    ...
Target "CoreClean" in file "C:\Program Files (x86)\MSBuild\Microsoft\WiX\v3.x\wix2010.targets" from project "C:\web\main\Amazon.Webby.Install\Amazon.Webby.Install.wixproj" (target "Clean" depends on it):
    Task "ReadLinesFromFile"
    Done executing task "ReadLinesFromFile".
    Task "FindUnderPath"
        Comparison path is "bin\Release\".
    Done executing task "FindUnderPath".
    Task "FindUnderPath"
        Comparison path is "obj\Release\".
    Done executing task "FindUnderPath".
    Task "Delete"
        Deleting file "C:\web\main\Amazon.Webby.Install\bin\Release\AmazonWebsiteInstaller.msi".
        Deleting file "C:\web\main\Amazon.Webby.Install\bin\Release\AmazonWebsiteInstaller.wixpdb".
        Deleting file "obj\Release\MainWixComponents.wixobj".
        Deleting file "obj\Release\UploadContent.wixobj".
        Deleting file "obj\Release\WebSiteContent.wixobj".
        Deleting file "obj\Release\Product.Generated.wixobj".
    Done executing task "Delete".   
    ...
    ...

Я не могу найти ни одной задачи удаления в файле проекта установщика, которая включает в себя папку msi или выходную папку, так что это результат того, что Visual Studio выполняет перестройку и думает, что ей нужно очистить файлы, которых нет.

Похоже, что это соответствующий раздел в "C: \ Program Files (x86) \ MSBuild \ Microsoft \ WiX \ v3.x \ wix2010.targets", вызывающий удаление недавно созданного msi:

<!--
==================================================================================================
CoreClean

Cleans all of the compile and link outputs as well as any intermediate files generated along
the way.
==================================================================================================
-->
<PropertyGroup>
<CoreCleanDependsOn></CoreCleanDependsOn>
</PropertyGroup>
<Target
Name="CoreClean"
DependsOnTargets="$(CoreCleanDependsOn)">
...
<!-- Delete those files. -->
<Delete Files="@(_CleanPriorFileWritesInOutput);@(_CleanPriorFileWritesInIntermediate)" TreatErrorsAsWarnings="true">
<Output TaskParameter="DeletedFiles" ItemName="_CleanPriorFileWritesDeleted" />
</Delete>
...

Есть идеи?

Спасибо.

Ответы [ 2 ]

1 голос
/ 26 января 2012

Я знаю, что он старый, но это упоминается как исправленная ошибка в SourceForge:

http://sourceforge.net/tracker/?func=detail&atid=642714&aid=1719357&group_id=105970

Вы используете версию 3.0.4102.0?Похоже, спор о том, действительно ли ошибка в комментариях исправлена,

0 голосов
/ 03 февраля 2012

Чтобы решить эту проблему, я взял все шаги InitialTargets (которые были вызовами msbuild.exe) из файла wixproj и переместил их в пакетный скрипт, вызываемый из свойства проекта события предварительной сборки.Я сделал это потому, что была еще одна проблема - целевые проекты создавались при загрузке проекта, а это означало, что для открытия решения потребовалось много времени.В любом случае, перемещение всего в пакетный файл решило обе проблемы.

...