Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Deployment 如何部署不同的App.config值(使用WiX)_Deployment_Wix_App Config_Config - Fatal编程技术网

Deployment 如何部署不同的App.config值(使用WiX)

Deployment 如何部署不同的App.config值(使用WiX),deployment,wix,app-config,config,Deployment,Wix,App Config,Config,我一直在寻找一个关于如何在App.config文件中为不同的值使用WiX安装程序部署应用程序的最佳实践建议。比如说 在我的本地开发机器上,我使用App.config设置测试环境: <configuration> <appSettings> <WorkingDirectory>C:\Working</WorkingDirectory> </appSettings> <connectionStr

我一直在寻找一个关于如何在App.config文件中为不同的值使用WiX安装程序部署应用程序的最佳实践建议。比如说

在我的本地开发机器上,我使用App.config设置测试环境:

<configuration>
    <appSettings>
        <WorkingDirectory>C:\Working</WorkingDirectory>
    </appSettings>
    <connectionStrings>
        <add name="ApplicationEntities" 
             connectionString="[TestingConnectionString]" 
             providerName="System.Data.EntityClient" />
    </connectionStrings>
</configuration>

C:\工作
当我部署到测试环境时,这些设置是可以接受的。但是,当我们部署到生产环境时,我希望它们有所不同。例如:

<configuration>
    <appSettings>
        <WorkingDirectory>\\prodserver\Working</WorkingDirectory>
    </appSettings>
    <connectionStrings>
        <add name="ApplicationEntities" 
             connectionString="[ProductionConnectionString]" 
             providerName="System.Data.EntityClient" />
    </connectionStrings>
</configuration>

\\prodserver\Working
我的问题的答案很可能与WiX无关。但为了以防万一,这里是我的WiX Product.wxs文件的相关片段:

<Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
        <Component Id="ProductComponent" Guid="{MY-GUID}">    
            <File Id="Application.exe"
                  Name="Application.exe"
                  Source="..\Application.exe"
                  Vital="yes"
                  KeyPath="yes"
                  DiskId="1" />
            <File Id="Application.exe.config"
                  Name="Application.exe.config"
                  Source="..\Application.exe.config"
                  Vital="yes"
                  KeyPath="no"
                  DiskId="1" />
        </Component>
    </ComponentGroup>
</Fragment>


此设置以在生产服务器上手动编辑App.config结束,这会导致手动错误。如何更好地处理此问题以适应自动部署?

我可以想出两个选项,部署app.config文件并使用元素对其进行编辑,或者维护多个app.config文件,每个文件代表您的目标环境,然后部署相应的文件

这是两个选项的示例,请注意,我复制了文件,而不是将其放在文件系统中。这有两个目的,首先,您可以通过文件名看到部署了哪个文件,其次,如果development.app.config和production.app.config放在同一位置,您将得到一个验证错误,之后复制文件可以避免此错误

还要注意,我有一个与组件相关联的条件,您需要决定如何标识要部署到的环境。一些想法可能是使用机器名、OU或只是将其作为属性在命令行中传递

<Component Id="development.app.config" Guid="*">

    <Condition>DEVELOPMENT</Condition>
    <File Name="development.app.config" KeyPath="yes">
        <CopyFile Id="development.app.config" DestinationName="app.config" />
    </File>

    <util:XmlFile
        Id="WorkingDirectory"
        Action="setValue"
        File="app.config"
        ElementPath="/configuration/appSettings"
        Name="WorkingDirectory"
        Value="C:\Working"
        Permanent="no" />

</Component>

<Component Id="production.app.config" Guid="*">

    <Condition>PRODUCTION</Condition>
    <File Name="production.app.config" KeyPath="yes">
        <CopyFile Id="production.app.config" DestinationName="app.config" />
    </File>

    <util:XmlFile
        Id="WorkingDirectory"
        Action="setValue"
        File="app.config"
        ElementPath="/configuration/appSettings"
        Name="WorkingDirectory"
        Value="\\prodserver\Working"
        Permanent="no" />

</Component>

发展
生产