zoukankan      html  css  js  c++  java
  • MSBuild 教程(2)

    如果你没有看过第一部分教程,请先看完后再回到这里来继续我们的第二部分。

    我们下一步的工作是发布我们的网站,也就是创建Publish target. 为了能使我们的target工作,我们需要给它传递两个属性,WebProjectOutputDir 和 OutDir, 这两个变量将确保我们能把我们的网站文件发布到正确的目录下面。

    MSbuild 允许我们声明一个PropertyGroup, 在这个PropertyGroup中,我们可以创建一些中间变量用来存储一些设置数据,当我们进行读写操作的时候,我们会需要这些设置数据。

    好了,看例子:

     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Run">
     3     <PropertyGroup>
     4         <OutputFolder>Output</OutputFolder>
     5     </PropertyGroup>
     6 
     7     <Target Name="Run">
     8         <CallTarget Targets="Clean" />
     9         <CallTarget Targets="Publish" />
    10     </Target>
    11 
    12     <Target Name="Clean">
    13         <ItemGroup>
    14             <BinFiles Include="bin*.*" />
    15         </ItemGroup>
    16         <Delete Files="@(BinFiles)" />
    17     </Target>
    18 
    19     <Target Name="Publish">
    20         <RemoveDir Directories="$(OutputFolder)" ContinueOnError="true" />
    21         <MSBuild Projects="BuildDemoSite.csproj"
    22                  Targets="ResolveReferences;_CopyWebApplication"
    23                  Properties="WebProjectOutputDir=$(OutputFolder);OutDir=$(WebProjectOutputDir)" />
    24     </Target>
    25 </Project>

    正如你看到的,ResolveReferences target也被调用了,这是为了确保第三方的依赖也能够复制到Output目录下。

    执行命令:msbuild build.xml, 结果如下

    image

    但是你也许注意到,在Output目录下,一些我不想复制的文件也一并复制了进来,比如Build.xml脚本本身,还有一些环境相关的配置文件:Live.Config & Test.Config. 那是因为它们的build action设置成了content, 你只要把build action设置成None,然后在重新执行下脚本,就不会出现上面的问题了。

    image

    现在这个网站基本上能够部署了,但是我们还需要把环境相关的配置复制到 web.config中来,那我们现在就开始这个教程

    正如我们在 第一部分教程中提到的,除了web.config 文件,我们还有live.config 和 test.config文件。 同时web.config包含关于网站的所有配置,live.config和 test.config包含一些与部署环境相关的一些配置,接下来的工作就是要把部署环境相关的值正确的复制到web.config中来。

    为了实现这个目的,我们通常的思路是用XPath从一个文件中读取配置信息,然后再通过XPath把这个信息写到另一个文件中去。但是快速浏览下内置的Task,没有找到有这个功能的,庆幸的是,MSBuild Community Tasks Project拯救了我们,它提供了XmlRead 和 XmllUpdate task。那先让我们下载,安装它。

    在用他们之前,我们要确保下面的XML已经插入到我们的build.xml的根节点上了

    <Import Project="C:Program Files (x86)MSBuildMSBuildCommunityTasksMSBuild.Community.Tasks.Targets"/>

    然后我们增加一个Environment的中间变量在PropertyGroup中,当前它是被硬编码的写成了Test,我们会在以后的教程成修改这个,让它可以配置。

    <PropertyGroup>
        <Environment>Test</Environment>
        <CompilationDebug />
        <OutputFolder>Output</OutputFolder>
    </PropertyGroup>

    好,我们第一步是用XmlRead task去获取环境配置的数据,当前我只列举了XmlRead的一个例子, 你可以添加更多

    1 <Target Name="GetConfig">
    2     <XmlRead XPath="configuration/system.web/compilation/@debug"
    3     XmlFileName="$(Environment).config">
    4         <Output TaskParameter="Value" PropertyName="CompilationDebug" />
    5     </XmlRead>
    6 </Target>
    1. GetConfig target包含所有的Xmlread task
    2. XmlFileName属性有个变量 $(Environment).config,这个变量指向的是我们的前面硬编码的Test.
    3. Output是用来把XmlRead的返回值存储到CompilationDebug属性中。

    几乎同样的,我们的XmlUpdate采用同样的语法, 其中注意的是 DependsOnTargets=”GetConfig”是确保复制数据的时候,要先读再写。

    1 <Target Name="SetConfig" DependsOnTargets="GetConfig">
    2     <XmlUpdate XPath="configuration/system.web/compilation/@debug"
    3                 XmlFileName="Outputweb.config"
    4                 Value="$(CompilationDebug)" />
    5 </Target>

    好了,让我们开始见证奇迹的时候,执行下面的命令

    msbuild Build.xml /t:SetConfig

    检查一下是不是所有的命令都工作,打开output文件下的web.config文件,看看数据是不是跟Test.config中的一致。

    你可以查看整个build.xml的代码

  • 相关阅读:
    Web负载均衡的几种实现方式
    DNS负载均衡
    NoSQL开篇——为什么要使用NoSQL
    mySQL优化 my.ini 配置说明
    mysql性能优化-慢查询分析、优化索引和配置
    MySQL性能优化的最佳20+条经验
    IOS的UIPickerView 和UIDatePicker
    IOS的KVC
    IOS中的通知NSNotification
    IOS对话框UIAlertView
  • 原文地址:https://www.cnblogs.com/peteryan/p/3811618.html
Copyright © 2011-2022 走看看