Visual Studio WiX安装程序项目在重建时删除msi输出

时间:2012-01-25 16:06:28

标签: visual-studio-2010 visual-studio wix windows-installer

我从最近离开的承包商那里继承了一个WiX项目。

当我构建WiX安装程序项目时,没有问题 - .msi是按预期构建和输出的。

但是,当我“重建”WiX安装程序项目时,.msi再次由light.exe构建得很好,但随后被“CoreClean”删除。

更多信息:wix项目打包(和引用)一个Web项目。

这是输出的片段:

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 个答案:

答案 0 :(得分:1)

我知道它已经过时但是在SourceForge中提到这是一个固定的错误:

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

您使用的是3.0.4102.0版本吗?

在评论中是否确实修复了错误似乎存在争议。

答案 1 :(得分:0)

为了解决这个问题,我从wixproj文件中取出了所有InitialTargets步骤(这是msbuild.exe调用),并将它们移动到从预构建事件项目属性调用的批处理脚本中。我这样做是因为还有另一个问题 - 目标项目是在项目加载时构建的,这意味着打开解决方案需要很长时间。无论如何,将所有内容移动到批处理文件中都可以解决这两个问题。