我应该让热量产生导向吗?在编译期间尝试自动生成时出现错误,因为我没有使用标准目录 [英] Should I allow heat to generate guids? Getting an error when I try auto-generate during compile because I am not using a standard directory

查看:21
本文介绍了我应该让热量产生导向吗?在编译期间尝试自动生成时出现错误,因为我没有使用标准目录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的第一个问题是,我应该努力让编译器使用自动生成的 guid 吗?

My first question is, should I work to get the compiler working with auto-generated guids?

我正在尝试使用 WiX 为网站创建安装程序.请原谅我的无知,这是我的第一个 WiX 项目.我正在关注这篇文章:

I am trying to create an installer for a website with WiX. Please excuse my ignorance, this is my first WiX project. I am following this article:

http:///blog.bartdemeyer.be/2013/10/create-an-installer-for-website-with-wix-part-1/

该过程使用 msbuild 调用多个 WiX 工具以最终创建 MSI.该示例在调用 heat 时使用立即生成 guid"(-gg"开关):

The process uses msbuild to call several WiX tools to ultimately create an MSI. The example uses "Generate guids now" (the "-gg" switch) when calling heat:

<Target Name="Harvest">
    <!-- Harvest all content of published result -->
    <Exec
        Command='"$(WiX)binheat.exe" dir $(Publish) -dr INSTALLFOLDER -ke -srd -cg MgrWebComponents -var var.publishDir -gg -out $(WebSiteContentCode)'
        ContinueOnError="false"
        WorkingDirectory="." />
</Target>

我在其他地方阅读过使用自动生成的 guid(-ag 开关)来确保正确安装产品更新的最佳做法.我注意到每次加热时导轨都会发生变化.

I was reading elsewhere it is best practice to use auto-generated guids (the -ag switch) to ensure product updates install correctly. I notice the guids change every time heat is run.

<Fragment>
    <ComponentGroup Id="MgrWebComponents">
        <Component Id="cmp56294569B275493319100C26538BA16C" Directory="INSTALLFOLDER" Guid="{A43DA07B-C4CD-4FE0-AC09-EEA693AB2BA7}">
            <File Id="fil93D55732EC03C2B809F21B9423BF5550" KeyPath="yes" Source="$(var.publishDir)BrandImageService.ashx" />
        </Component>
        <Component Id="cmp6BD39B2D572EA73C29A81AE5D1C3F0C4" Directory="INSTALLFOLDER" Guid="{99B7B916-AEC0-4EE9-B17F-E7B325E93A4D}">
            <File Id="filE861424851E26D456D43F5D1855B3E7B" KeyPath="yes" Source="$(var.publishDir)Dashboard.aspx" />
        </Component>
...

如果我应该使用自动生成的 guid,我需要让编译器工作.我在编译时尝试使用自动生成的 guid 的每个文件都出现错误.

If I should use auto-generated guids I need to get the compiler working. I am getting errors for every file for trying to use auto-generated guids when compiling.

LGHT0231:组件cmp2BE6B5C092821452E1438D39A5110DDB"具有路径为TARGETDIRinetpubmanager ools oolshome.aspx"的密钥文件.由于此路径未植根于标准目录之一(如 ProgramFilesFolder),此组件不符合条件因为有一个自动生成的 guid.(这个错误也可能如果路径包含可能的标准目录(例如嵌套ProgramFilesFolder 下名为Common Files"的目录.)

LGHT0231: The component 'cmp2BE6B5C092821452E1438D39A5110DDB' has a key file with path 'TARGETDIRinetpubmanager ools oolshome.aspx'. Since this path is not rooted in one of the standard directories (like ProgramFilesFolder), this component does not fit the criteria for having an automatically generated guid. (This error may also occur if a path contains a likely standard directory such as nesting a directory with name "Common Files" under ProgramFilesFolder.)

我的目录片段是:

<Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="INETPUB" Name="Inetpub">
            <Directory Id="INSTALLFOLDER" Name="Manager" />
        </Directory>
    </Directory>
</Fragment>

产生热量的片段如下所示:

The heat generated fragment looks like:

<Fragment>
    <ComponentGroup Id="MgrWebComponents">
        <Component Id="cmp56294569B275493319100C26538BA16C" Directory="INSTALLFOLDER" Guid="*">
            <File Id="fil93D55732EC03C2B809F21B9423BF5550" KeyPath="yes" Source="$(var.publishDir)BrandImageService.ashx" />
        </Component>
        <Component Id="cmp6BD39B2D572EA73C29A81AE5D1C3F0C4" Directory="INSTALLFOLDER" Guid="*">
            <File Id="filE861424851E26D456D43F5D1855B3E7B" KeyPath="yes" Source="$(var.publishDir)Dashboard.aspx" />
        </Component>
...

msbuild 的目标:

The targets for msbuild:

<Target Name="Build">
    <!-- Compile whole solution in release mode -->
    <MSBuild
        Projects="..Manager.sln"
        Targets="ReBuild"
        Properties="Configuration=Release" />
</Target>

<Target Name="PublishWebsite">
    <!-- Remove complete publish folder in order to 
            be sure that everything will be newly compiled -->
    <Message Text="Removing publish directory: $(SetupF)"/>
    <RemoveDir Directories="$(SetupF)" ContinueOnError="false" />
    <Message Text="Start to publish website" Importance="high" />
    <MSBuild
        Projects="..\ManagerUIManager.UI.csproj"
        Targets="ResolveReferences;_CopyWebApplication"
        Properties="OutDir=$(Publish)bin;WebProjectOutputDir=$(Publish);Configuration=Release" />
</Target>

<Target Name="Harvest">
    <!-- Harvest all content of published result -->
    <Exec
        Command='"$(WiX)binheat.exe" website $(Publish) -dr INSTALLFOLDER -ke -srd -cg MgrWebComponents -var var.publishDir -ag -out $(WebSiteContentCode)'
        ContinueOnError="false"
        WorkingDirectory="." />
</Target>

<Target Name="WIX">
    <!--     At last create an installer -->
    <Message Text="TEST: @(WixCode)"/>
    <Exec
        Command='"$(WiX)bincandle.exe" -dpublishDir=$(Publish) -dMgrWebResourceDir=. @(WixCode, &apos; &apos;)'
        ContinueOnError="false"
        WorkingDirectory="." />
    <Exec
        Command='"$(WiX)binlight.exe" -spdb -out $(MsiOut) @(WixObject, &apos; &apos;)'
        ContinueOnError="false"
        WorkingDirectory="." />

    <!-- A message at the end -->
    <Message Text="Install package has been created." />
</Target>

构建命令为:msbuild/t:Build;PublishWebsite;Harvest;WIX setup.build

我了解生成的 guid 使用目录的种子.我应该更改目录的位置吗?

I understand the generated guid uses the seed of the directory. Should I change the location of the directory?

谢谢!!

推荐答案

感谢@CheGueVerra,他为我指明了正确的方向.我只是将目录位置更改为在 ProgramFiles 中,它能够编译.

Thank you to @CheGueVerra , he pointed me in the right direction. I just changed the directory location to be in ProgramFiles and it was able to compile.

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="Manager" />
      </Directory>
    </Directory>
  </Fragment>

后来我发现了一种更好的方法,即使用ComponentGuidGenerationSeed"属性将目录保留在 inetpub 文件夹中.

Later on I found a better way with the use of the "ComponentGuidGenerationSeed" attribute to keep the directory in the inetpub folder.

<Directory Id='TARGETDIR' Name='SourceDir'>
    <Directory Id="IISMain" Name='inetpub'>
        <Directory Id="WWWMain" Name='wwwroot' 
           ComponentGuidGenerationSeed='{Put-your-own-generated-guid-here}'>
            <Directory Id='INSTALLFOLDER' Name='Manager'>
            </Directory>
        </Directory>
    </Directory>
</Directory>

这篇关于我应该让热量产生导向吗?在编译期间尝试自动生成时出现错误,因为我没有使用标准目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆