WiX(Votive)项目参考收集(HEAT)一个ASP.Net Web应用程序

4

我在做什么

我有一个ASP.Net Web应用程序和一个WiX设置项目,它们都在Visual Studio 2010中。我可以使用以下HEAT命令显式地收集Web应用程序,并将其设置为设置项目的预构建事件:

“%WIX%\bin\heat.exe” project "$(SolutionDir)Application.WebUI\Application.WebUI.vbproj" -o "$(ProjectDir)ProjectOutputContent.wxs" -pog Content -ag -template fragment -nologo -directoryid RUNTIMEFOLDER

“%WIX%\bin\heat.exe” project "$(SolutionDir)Application.WebUI\Application.WebUI.vbproj" -o "$(ProjectDir)ProjectOutputBinariesAndSymbols.wxs" -pog Binaries -pog Symbols -ag -template fragment -nologo -directoryid BINFOLDER

请注意,RUNTIME文件夹和BINFOLDER是我在主产品WXS文件中声明设置的目录。

为什么我不喜欢它

这种方法很烦人,因为我需要在构建设置项目之前检出HEAT生成的片段WXS文件。另一个考虑因素是它是一个Web应用程序,我需要将二进制文件和符号放入与内容不同的目录(bin)中。

我的目标

我更愿意在Wix设置项目中使用项目引用,并将Harvest属性设置为True。然后,我可以收集BinariesContentSatellites以获取我在片段中需要的项目,然后设置一个单独的目录ID,我可以在主产品WXS中引用它。问题是这将把内容、二进制文件和符号放在同一个文件夹中,而我需要后两个在嵌套的bin文件夹中。我不能两次添加此项目引用,每次使用不同的收集选项。

我的问题

有没有办法做到我想要的,还是我需要继续使用预构建事件?另外,我考虑过手动收集片段一次,而不使用构建事件,然后根据需要重新收集。我更愿意避免这种方法。

1个回答

3
回答你的问题“为什么我不喜欢它”: 我也遇到了同样的问题,但是后来我找到了解决方法。您不需要在fragment文件中进行check-in操作。只需将文件物理地添加到项目中,然后在项目中包含即可。
注意: 不要从项目中添加fragment文件。

我喜欢你的想法。如果有人第一次从源代码控制中拉取它,该项目看起来可能会缺少文件,但是它将成功构建。在构建后,Visual Studio 不会立即显示这些文件,但它们确实存在。重新打开项目将使它们出现。 - Matt Poland
我正在考虑采用这种方法的变体。我已经将“ProjectOutputBinariesAndSymbols.wxs”和“ProjectOutputContent.wxs”添加到我的编译器附加参数中。我还在Wix安装程序属性屏幕下的工具设置中的链接器附加参数中添加了“obj\Debug\ProjectOutputBinariesAndSymbols.wixobj”和“obj\Debug\ProjectOutputContent.wixobj”。 - Matt Poland
您还可以明确地从源代码控制中排除文件。选择该文件,单击“文件”->“源代码控制”->(在VS2012中为“高级”)->从源代码控制中排除ProjectOutputContent.wxs。请参见:http://img15.imageshack.us/img15/2189/69468689.png。 - riezebosch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接