Pau*_*rge 5 windows-installer wix wix3.5 wix3.6
我从命令行使用Wix 3.6 beta,而不是VS项目.我有一个Web应用程序,以热量作为目录收获.这有效.我正在使用web.config转换来管理每个目标环境web.config文件.这些是使用msbuild输出的,这可以在Visual Studio和源代码控制中保持可见.
我遇到了一个问题,部署了几个web.config文件中的一个,我手动将其包含在product.wxs中作为具有条件的组件.我期望将所有组件都包含为可部署功能,并让条件选择一个作为活动组件.例如:
<DirectoryRef Id="wwwroot">
<Component Id="setup_a" Guid="some_guid" >
<File Source="$(var.ConfigSourceDir)\setup_a\web.config" />
<Condition>ENVIRON = setup_a</Condition>
</Component>
<Component Id="setup_b" Guid="some_guid" >
<File Source="$(var.ConfigSourceDir)\setup_b\web.config" />
<Condition>ENVIRON = setup_b</Condition>
</Component>
Run Code Online (Sandbox Code Playgroud)
这没有创建任何文件重命名,移动或删除问题,但有一个非常基本的问题,即多个web.config文件被映射到同一目的地,这给我一个轻微的错误"Product.wxs(xxx):error LGHT0091 :找到重复的符号'File:web.config'.这通常意味着Id是重复的.检查以确保给定类型(文件,组件,功能)的所有标识符都是唯一的."
另一种方法是使用不同的命名.config文件并将其重命名/移动为web.config,如下所示:
<DirectoryRef Id="wwwroot">
<Component Id="setup_a" Guid="some_guid" >
<File Id="setup_a.config" Source="$(var.ConfigSourceDir)\setup_a.config" />
<CopyFile Id="moveit" SourceDirectory="wwwroot" SourceName="setup_a.config" DestinationDirectory="wwwroot" DestinationName="web.config" />
</Component>
Run Code Online (Sandbox Code Playgroud)
这不会引发错误,但是CopyFile命令根本不执行任何操作.我只是在wwwroot文件夹中获取setup_a.config.
如果我将CopyFile嵌套在File中,则复制操作将起作用:
<DirectoryRef Id="wwwroot">
<Component Id="setup_a" Guid="some_guid" >
<File Id="setup_a.config" Source="$(var.ConfigSourceDir)\setup_a.config" >
<CopyFile Id="moveit" DestinationName="web.config"/>
</File>
</Component>
Run Code Online (Sandbox Code Playgroud)
...但嵌套的CopyFile意味着我无法添加(不允许)Delete ="yes"属性来创建"移动"操作.相反,我留下了wwwroot文件夹中的setup_a.config和web.config.或者,如果我在同一个组件元素中添加一个单独的removefile,它也什么都不做:
<RemoveFile Id="removefile" On="install" Directory="wwwroot" Name="setup_a.config"/>
</Component>
Run Code Online (Sandbox Code Playgroud)
所以,我希望有一个工作示例,说明如何处理条件部署中的多个web.config文件,这些文件不会留下文件.web.config的目标文件名由框架修复,无法更改.使用配置转换也可以在wix之外预先生成不同的配置,这也无法更改,但生成的文件名可以是任何内容.
干杯!
你太复杂了.这应该工作:
<Component Id="setup_a" Guid="some_guid" >
<File Name="web.config" Id="config_a" Source="$(var.ConfigSourceDir)\setup_a\web.config" />
<Condition>ENVIRON = setup_a</Condition>
</Component>
<Component Id="setup_b" Guid="some_guid" >
<File Name="web.config" Id="config_b" Source="$(var.ConfigSourceDir)\setup_b\web.config" />
<Condition>ENVIRON = setup_b</Condition>
</Component>
Run Code Online (Sandbox Code Playgroud)
请注意以下几点:
在这个样本中,灯仍会抱怨LGHT1076,但这只是一个警告 - 它引起你的注意,条件必须互相排斥,以避免出现问题.
| 归档时间: |
|
| 查看次数: |
3623 次 |
| 最近记录: |