我已经使用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)?
提前致谢!
答案 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="<Namespace Prefix='myNamespace' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/>" 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="<Namespace Prefix='myNamespace' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/>" 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类型的属性。 我希望这会有所帮助。