简体   繁体   中英

How to include Web Application folder inside MSI

I am trying to do a Web Application Setup with VS2010 and WIX, it is working ok, but the only thing I want to improve is when you buiild the Setup project it places the Web Application output in a separete folder inside the bin folder, so if I want to install that Web in a server I need to copy the msi file + web application Folder.

Is there any way of building the Setup Project to include that folder inside the msi package??

Here is my .wixproj file:

  <?xml version="1.0" encoding="utf-8"?>


<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
      <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
      <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
      <ProductVersion>3.7</ProductVersion>
      <ProjectGuid>{7bc848bd-4069-429e-847e-4f964a148362}</ProjectGuid>
      <SchemaVersion>2.0</SchemaVersion>
      <OutputName>Tgw.WebClient.Goodyear.Setup</OutputName>
      <OutputType>Package</OutputType>
      <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
      <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
      <SccProjectName>SAK</SccProjectName>
      <SccProvider>SAK</SccProvider>
      <SccAuxPath>SAK</SccAuxPath>
      <SccLocalPath>SAK</SccLocalPath>
    </PropertyGroup>
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
      <OutputPath>bin\$(Configuration)\</OutputPath>
      <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
      <DefineConstants>Debug</DefineConstants>
    </PropertyGroup>
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
      <OutputPath>bin\$(Configuration)\</OutputPath>
      <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
    </PropertyGroup>
    <ItemGroup>
      <Compile Include="MainConfiguration.wxs" />
      <Compile Include="Tgw.WebClient.Standalone.Web.wxs" />
      <Compile Include="WIXUI_Screens.wxs" />
    </ItemGroup>
    <ItemGroup>
      <EmbeddedResource Include="Resources\Strings.wxl" />
    </ItemGroup>
    <ItemGroup>
      <ProjectReference Include="..\..\Standalone\Source\Tgw.WebClient.Standalone.Web\Tgw.WebClient.Standalone.Web.csproj">
        <Name>Tgw.WebClient.Standalone.Web</Name>
        <Project>{f50a4ff0-6878-4a27-bce7-4956d1ae27db}</Project>
        <Private>True</Private>
        <DoNotHarvest>True</DoNotHarvest>
        <RefProjectOutputGroups>
        </RefProjectOutputGroups>
        <RefTargetDir>TARGETINSTALLDIRECTORY</RefTargetDir>
        <WebProject>True</WebProject>
      </ProjectReference>
    </ItemGroup>
    <ItemGroup>
      <WixExtension Include="WixNetFxExtension">
        <HintPath>$(WixExtDir)\WixNetFxExtension.dll</HintPath>
        <Name>WixNetFxExtension</Name>
      </WixExtension>
      <WixExtension Include="WixIIsExtension">
        <HintPath>$(WixExtDir)\WixIIsExtension.dll</HintPath>
        <Name>WixIIsExtension</Name>
      </WixExtension>
      <WixExtension Include="WixUtilExtension">
        <HintPath>$(WixExtDir)\WixUtilExtension.dll</HintPath>
        <Name>WixUtilExtension</Name>
      </WixExtension>
      <WixExtension Include="WixUIExtension">
        <HintPath>$(WixExtDir)\WixUIExtension.dll</HintPath>
        <Name>WixUIExtension</Name>
      </WixExtension>
    </ItemGroup>
    <ItemGroup>
      <Content Include="Configuration\Conditions.wxi" />
      <Content Include="Configuration\Settings.wxi" />
      <Content Include="Resources\CommanderApp_32.ico" />
      <Content Include="Scripts\CreateWebApplicationConfigFiles.ps1" />
    </ItemGroup>
    <ItemGroup>
      <Folder Include="Configuration" />
      <Folder Include="Scripts" />
      <Folder Include="Resources" />
    </ItemGroup>
    <Import Project="$(WixTargetsPath)" />
    <!--
      To modify your build process, add your task inside one of the targets below and uncomment it.
      Other similar extension points exist, see Wix.targets.-->
    <Import Project="$(WixTargetsPath)" />
    <Target Name="BeforeBuild">
      <MSBuild Projects="%(ProjectReference.FullPath)" Targets="Package" Properties="Configuration=$(Configuration);Platform=AnyCPU" Condition="'%(ProjectReference.WebProject)'=='True'" />
      <PropertyGroup>
        <LinkerBaseInputPaths>%(ProjectReference.RootDir)%(ProjectReference.Directory)obj\$(Configuration)\Package\PackageTmp\</LinkerBaseInputPaths>
        <DefineConstants>BasePath=%(ProjectReference.RootDir)%(ProjectReference.Directory);</DefineConstants>
      </PropertyGroup>
      <HeatDirectory OutputFile="%(ProjectReference.Filename).wxs" Directory="%(ProjectReference.RootDir)%(ProjectReference.Directory)obj\$(Configuration)\Package\PackageTmp\" DirectoryRefId="TARGETINSTALLDIRECTORY" ComponentGroupName="%(ProjectReference.Filename)_Project" AutogenerateGuids="true" SuppressCom="true" SuppressFragments="true" SuppressRegistry="true" SuppressRootDirectory="true" ToolPath="$(WixToolPath)" Condition="'%(ProjectReference.WebProject)'=='True'" PreprocessorVariable="var.BasePath" />
    </Target>
  </Project>

And this is part of my .wsx auto generated:

  <?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="TARGETINSTALLDIRECTORY">
            <Component Id="cmp975763C4E1B3C939E4CD1957234F6BAC" Guid="*">
                <File Id="filAB034261C737C6286CB0722DB3566B4F" KeyPath="yes" Source="$(var.BasePath)\About.aspx" />
            </Component>
            <Component Id="cmp0ADE3CAB02CA0E4E0C08810D00C09DEB" Guid="*">
                <File Id="fil2CF0D37E848154468D37906E1D0B2FB8" KeyPath="yes" Source="$(var.BasePath)\AspWebStart.aspx" />
            </Component>            
            </Directory>
        </DirectoryRef>
    </Fragment>
    <Fragment>
        <ComponentGroup Id="Tgw.WebClient.Standalone.Web_Project">
            <ComponentRef Id="cmp975763C4E1B3C939E4CD1957234F6BAC" />
            <ComponentRef Id="cmp0ADE3CAB02CA0E4E0C08810D00C09DEB" />               
        </ComponentGroup>
    </Fragment>
</Wix>

Without seeing the contents of the Tgw.WebClient.Standalone.Web.wxs file I can't say for certain but this is the most likely answer to your question! :)

If you mean the content files of the web application such as html, cshtml, aspx, jpg etc. you have a few options.

Manually include all the files in your .wxs files as components:

<Component>
    <File Id="ContentFile1"
          Name="index.html"
          Source="$(var.Tgw.WebClient.Standalone.Web.ProjectDir)\index.html" />
</Component>

obviously this will be quite time-consuming to do if you have a large website.

Use the commandline tool heat to harvest your all your content files and create the .wxs for you which you can then statically include. This has the advantage that you can generate the above components quickly but tweak easily.

Finally you can edit your wixproj file and include the HeatDirectory element. This will then harvest your content on every build so any new file are automatically included. You can also modify this output using an xslt if required.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM