如何在构建项目时从配置文件中读取值?

时间:2015-01-14 12:05:34

标签: c# wix

我已经使用WiX 3.8和VS 2013(C#)编写了一个bootstrapper项目。 在项目文件中您可以创建类似的属性,以便从要安装的EXE文件中获取构建版本:

  <Target Name="BeforeBuild">
    <!-- Set the Variable BuildVersion -->
    <GetAssemblyIdentity AssemblyFiles="../FilesForSetup/MyApp.exe">
      <Output TaskParameter="Assemblies" ItemName="AsmInfo" />
    </GetAssemblyIdentity>
    <CreateProperty Value="%(AsmInfo.Version)">
      <Output TaskParameter="Value" PropertyName="BuildVersion" />
    </CreateProperty>
    <CreateProperty Value="$(DefineConstants)">
      <Output TaskParameter="Value" PropertyName="DefineConstantsOriginal" />
    </CreateProperty>
    <CreateProperty Value="$(DefineConstants);BuildVersion=$(BuildVersion)">
      <Output TaskParameter="Value" PropertyName="DefineConstants" />
    </CreateProperty>
  </Target>

现在我想将一些Web服务器登录属性(url,user,pw)放入配置文件中,在构建时读取属性并将它们放入项目属性中。 可以这样做,哪种类型的配置文件是最好的选择(例如XML)?

提前致谢!

1 个答案:

答案 0 :(得分:1)

是的,它可以完成,配置文件类型的最佳选择是XML。 在每个示例中,您可以编写用于Web服务器访问的配置文件,如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<parameters>
  <parameter name="webserverurl" value="http://deviis.myCompany.net/release/" />
  <parameter name="webserveruser" value="administrator" />
  <parameter name="webserverpassword" value="myPassword" />
</parameters>

然后我们在bundle文件中定义了一些变量:

<Variable Name="WebServerUrl"
          Value="$(var.WebServerUrl)"></Variable>
<Variable Name="WebServerUser"
          Value="$(var.WebServerUser)"></Variable>
<Variable Name="WebServerPassword"
          Value="$(var.WebServerPassword)"></Variable>

至少我们必须在bootstrapper项目文件中插入几行来从配置中读取属性并设置包变量。 这只是一个例子:Web服务器URL

<XmlPeek Namespaces="&lt;Namespace Prefix='myNamespace' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/&gt;" XmlInputPath="..\AppConfig\appconfig.xml" Query="/parameters/parameter[@name='webserverurl']/@value">
  <Output TaskParameter="Result" PropertyName="webserverurlResult" />
</XmlPeek>
<CreateProperty Value="$(webserverurlResult)">
  <Output TaskParameter="Value" PropertyName="WebServerUrlProp" />
</CreateProperty>
<CreateProperty Value="$(DefineConstants);WebServerUrl=$(WebServerUrlProp)">
  <Output TaskParameter="Value" PropertyName="DefineConstants" />
</CreateProperty>

首先,我们使用XmlPeek-tag读取属性并将其放入属性webserverurlResult中。 然后我们使用值webserverurlResult创建属性WebServerUrlProp并将其放入bundle变量WebServerUrl中。 或者,我们不必创建属性WebServerUrlProp。 在我们的项目文件中少了几行。 这看起来像是:

<XmlPeek Namespaces="&lt;Namespace Prefix='myNamespace' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/&gt;" XmlInputPath="..\AppConfig\appconfig.xml" Query="/parameters/parameter[@name='webserverurl']/@value">
  <Output TaskParameter="Result" PropertyName="webserverurlResult" />
</XmlPeek>
<CreateProperty Value="$(DefineConstants);WebServerUrl=$(webserverurlResult)">
  <Output TaskParameter="Value" PropertyName="DefineConstants" />
</CreateProperty>

每次构建bootstrapper项目时,它都会从配置文件中读取属性并将它们放入bundle变量中。 如果您有自制的UI,则可以访问变量值:

UrlWebapi = Bootstrapper.Engine.StringVariables["WebServerUrl"];

在这种情况下,UrlWebapi是string类型的属性。 我希望这会有所帮助。