I've just checked Heat in WiX 3.5. It also ignores Copy Local property of referenced assemblies. My conclusion: at the moment there is no way to harvest referenced assemblies using heat.exe with the "project" mode.
Ilya Serbis On 17.05.2010 14:57, Илья Сербис wrote: > Hi Matt, > > I've doublechecked Binares and Content output groups but without success. I > run heat from command line: > "%WIX%\bin\heat" project "..\..\src\Configurator.csproj" -pog:Binaries > -pog:Content -out heat.wxs > The only reference I have in outputs is compiled assembly. Heat completely > ignores other files in project's output directory (referenced assemblies - > they are there, I've checked it. I've also checked that the Copy Local > property for every of them is set to True). > May be the problem is because I use WiX 3.0? > Or I miss some special command line parameter? > > >> Hi Ilya, >> > >> In your source project, make sure you have the build action set >> appropriately for each file. It should be Compile for .cs files >> that make their way into assemblies, Content for files you want >> harvested by heat, and None for files you want heat to ignore. Then >> when setting your references, or using heat from the commandline, >> specify project output groups Binares and Content. I know this >> works, because I am using it for a web project, which has .aspx and >> .config files as content, and they get harvested just fine. >> > > >> Matt Johnson MCPD, MCTS, MCSD, MCDBA >> Director of Application Development >> Time America, Inc. >> ma...@timeamerica.com | www.timeamerica.com >> > >> -----Original Message----- >> From: Илья Сербис [mailto:iser...@shtrih-m.ru] >> Sent: Friday, May 14, 2010 6:15 AM >> To: General discussion for Windows Installer XML toolset. >> Subject: Re: [WiX-users] Adding reference to WiX project doesn't >> lead to copy referenced project's files >> > > >> Matt, >> > >> First of all thanks for your response. >> > >> msbuild's HarvestProject task isn't appropriate for my goals for >> some reasons. The main is that heat doesn't create list of all files >> from project's output directory but instead add reference only to >> the project assembly. This is almost useless because assembly >> usually need some files for its work (referenced assemblies, >> configuration files) and has some artifacts (like readme files). >> > >> Another issue I've faced with is that only files with specific >> extensions (or with specific names) should be put into .msi. Other >> files should be filtered out. Because heat has no options to control >> this I have only two ways to achieve the goal. First - remove >> unwanted files before the heat goes through the directory. Second - >> remove unwanted Components from generated wxs file by applying xsl >> transformation. I prefer the first solution (because del command is >> much more simpler than xslt language). >> > >> So before building .msi file my pre-build process should execute steps like >> this: >> 1. Copy files from output directory of C# project to the temporary >> directory >> 2. Delete unwanted files from the directory >> 3. Run heat to generate list of files in this directory >> > >> My question was about step 1. It would be nice if Votive be able to >> copy content of referenced project to its own output directory. This >> would allow me not to write relative paths to output directories of >> referenced projects manually. But everything looks like it's not possible. >> > >> Also note that I'm not be able to use Votive variables like >> $(var.ProjectName.foo) at the heat command prompt. I have to provide >> heat by the full path to the directory with files. >> > >> Ilya Serbis >> > > > >>> Hi, >>> > >>> That is not entirely correct. When you reference one project to >>> another, msbuild doesn't copy anything. It simply makes the >>> reference project available to the target project. It is up to the >>> target project itself to decide what it's going to do with that >>> reference. In the case of a c# project, it decides to copy files >>> according to the "Copy Local" property of the reference, and the >>> "Build Action" and "Copy to Output Directory" properties of each file. >>> > >>> Votive, (the Wix Visual Studio plugin), does other things with >>> project reference. First, it makes the project available through >>> variables such as $(var.ProjectName.Whatever) (see the wix docs on >>> "project references"). Second, if you are using Wix 3.5 with VS2010, >>> you get options for "Harvest" (true/false) and "ProjectOutputGroups" that >>> go along with Harvest=True. >>> > >>> Those two harvesting properties will control how Heat builds .wxs >>> files from your project. Those end up in the obj subdirectory, and >>> then passed in to Candle during the build process. >>> > >>> Whether files from your c# project make their way to your final >>> output directory in Wix depends on a whole lot of things. For >>> example, you may be using a compressed package where all your files >>> go inside cabinets and those get embedded in the msi. There may be >>> different Media elements defined in your package, or you may be >>> using those files in some other way inside your wix project. >>> > >>> Hopefully you now understand why you don't get files in your output >>> directory just from making the project reference. That would go >>> against all of the reasons that you build a wix project in the first place. >>> > > >>> Now - if what you really want to know is how to get files from your >>> referenced c# package into your output directory without them being >>> embedded in an msi, it's fairly simple: >>> 1) Set Compressed="no" on your package >>> 2) Reference your project and use the harvesting properties. >>> > >>> The only downside to this is that ALL your harvested files will end >>> up outside of the msi. To work around that, you'll need >>> Compressed="yes" on the files that you want inside your msi. The >>> problem now is that there's no opportunity to modify the .wxs >>> generated by the harvesting on the project reference, to get that >>> attribute on the files harvested there. IMHO, this is a major >>> oversight in Votive. We need the ability to provide transforms on the >>> project reference. >>> > >>> There is a workaround for this problem - You have to turn OFF >>> harvesting on your reference and do it the old wix 3.0 way. >>> Basically, open up your wixproj file and add an item group like such: >>> > >>> <ItemGroup> >>> <HarvestProject Include="..\MyWebApp.csproj"> >>> <ProjectOutputGroups>Content;Binaries</ProjectOutputGroups> >>> <Transforms>MyWebTransform.xslt</Transforms> >>> <Link>MyWebApp.csproj</Link> >>> </HarvestProject> >>> </ItemGroup> >>> > >>> Don't delete the reference though, it is still useful for the >>> $(var.ProjectName.Whatever) variables. Just set Harvest=False. >>> > >>> Now you can create an xslt for heat to use to add the >>> Compressed="yes" attribute to your File elements in the generated wxs. >>> > >>> I know this is an ugly workaround. I hope someone that works on >>> Votive is listening. This is a great example of why we need to be >>> able to specify transforms as a property on the project reference. >>> > > > >>> Matt Johnson MCPD, MCTS, MCSD, MCDBA >>> Director of Application Development >>> Time America, Inc. >>> ma...@timeamerica.com | www.timeamerica.com >>> > >>> -----Original Message----- >>> From: Илья Сербис [mailto:iser...@shtrih-m.ru] >>> Sent: Thursday, May 13, 2010 8:08 AM >>> To: wix-users@lists.sourceforge.net >>> Subject: [WiX-users] Adding reference to WiX project doesn't lead >>> to copy referenced project's files >>> > > >>> Hello! >>> > >>> I have WiX project included into Visual Studio solution along with >>> other projects written on C#. In order to automate build process I >>> need to get output files from some of C# projects, and add them to >>> msi file. >>> > >>> Usually when you add reference from one C# project to another, >>> msbuild copy files from output dir of referenced project to the >>> referrer's folder. But this rule is not applicable to WiX projects. >>> > >>> I've made reference from WiX project to one of C# projects but haven't >>> got any files from C# project in WiX output directory. Is it possible >>> to make standard references (which allow files to be copied)? >>> > >>> After getting all of the files in WiX output dir I'm going to filter >>> out some of them (in pre-build event) and then automatically generate >>> the list by the heat utility (also in pre-build event). It's simpler >>> than filter out Components through the xsl transformation from wxs >>> file generated by the heat. >>> > >>> Another issue I faced with: usually when I add file to C# project as a >>> link I can set "Copy if newer" option for this file in it's properties >>> window. But in case of WiX projects there is no such option. May be I >>> missed something? >>> > > > >>> ------------------------------------------------------------------------------ >>> > >>> _______________________________________________ >>> WiX-users mailing list >>> WiX-users@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/wix-users >>> > >>> ------------------------------------------------------------------------------ >>> > >>> _______________________________________________ >>> WiX-users mailing list >>> WiX-users@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/wix-users >>> > >>> > > > >> ------------------------------------------------------------------------------ >> > >> _______________________________________________ >> WiX-users mailing list >> WiX-users@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/wix-users >> > >> ------------------------------------------------------------------------------ >> > >> _______________________________________________ >> WiX-users mailing list >> WiX-users@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/wix-users >> > >> !DSPAM:3680870,4bed59bd710862011019437! >> > ------------------------------------------------------------------------------ _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users