msbuild是微软提供的一个用于生成应用程序的平台,你可以通过一个xml配置文件来控制和处理你的软件工程。它也集成到了vs里面,它不依赖于vs。

xml配置(架构)的组成元素:

  •   项目文件

      属性

      项

      任务

      目标

属性: 
<PropertyGroup>
<AssemblyName>MSBuildSample</AssemblyName>
<OutputPath>Bin\</OutputPath>
</PropertyGroup>
项: 
<ItemGroup>
<Compile Include="helloworld.cs" />
</ItemGroup>
任务:
    <MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')" />
<Csc Sources="@(Compile)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" />
目标:目标是将一些任务有顺序的组合到一起
<Target Name="Build">
<MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')" />
<Csc Sources="@(Compile)" OutputAssembly="$(OutputPath)$(AssemblyName).exe" />
</Target>

下面是msdn上面一个最简单的xml构架文件:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Compile Include="helloworld.cs" />
</ItemGroup>
<Target Name="Build">
<Csc Sources="@(Compile)"/>
</Target>
</Project>

该文件通过一个任务编译helloworld.cs文件。

下面是一个完整的构建一个c/s架构应用程序的简单示例:

xml文件定义的属性:
<PropertyGroup>
<OutDir>output</OutDir>
<OutServerDir>$(OutDir)server</OutServerDir>
<OutClientDir>$(OutDir)client</OutClientDir>
<SolutionFile>..\xx\你的工程文件.sln</SolutionFile>
<ServerDir>xx\xx\工程编译后bin\server目录</ServerDir>
<ClientDir>xx\xx\工程编译后bin\client目录</ClientDir>
</PropertyGroup>
xml文件定义的项:
<ItemGroup>
<ServerDirFiles Include="$(ServerDir)\**\*.*" Exclude="你要排除的文件定义"/>
<ClientDirFiles Include="$(ClientDir)\**\*.*" Exclude="你要排除的文件定义"/>
</ItemGroup>
xml文件定义的任务列表:
  1. Clean
  2. Init
  3. Build
  4. Relesase  
  <Target Name="Clean">
<RemoveDir Directories="$(OutDir)"/>
</Target> <Target Name="Init" DependsOnTargets="Clean">
<MakeDir Directories="$(OutDir)"/>
<MakeDir Directories="$(OutServerDir)"/>
<MakeDir Directories="$(OutClientDir)"/>
</Target> <Target Name="Build" DependsOnTargets="Init">
<MSBuild
Projects="$(SolutionFile)"
Targets="Rebuild"
Properties="Configuration=Release"/>
</Target> <Target Name="CopyFiles" DependsOnTargets="Build">
<Copy
SourceFiles="@(ServerDirFiles)"
DestinationFiles="@(ServerDirFiles->'$(OutServerDir)\%(RecursiveDir)%(Filename)%(Extension)')"/>
<Copy
SourceFiles="@(ClientDirFiles)"
DestinationFiles="@(ClientDirFiles->'$(OutClientDir)\%(RecursiveDir)%(Filename)%(Extension)')"/>
</Target>
以上几个片段的汇总:
<Project DefaultTargets="CopyFiles" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<OutDir>output</OutDir>
<OutServerDir>$(OutDir)server</OutServerDir>
<OutClientDir>$(OutDir)client</OutClientDir>
<SolutionFile>..\xx\你的工程文件.sln</SolutionFile>
<ServerDir>xx\xx\工程编译后bin\server目录</ServerDir>
<ClientDir>xx\xx\工程编译后bin\client目录</ClientDir>
</PropertyGroup> <ItemGroup>
<ServerDirFiles Include="$(ServerDir)\**\*.*"/>
<ClientDirFiles Include="$(ClientDir)\**\*.*"/>
</ItemGroup> <Target Name="Clean">
<RemoveDir Directories="$(OutDir)"/>
</Target> <Target Name="Init" DependsOnTargets="Clean">
<MakeDir Directories="$(OutDir)"/>
<MakeDir Directories="$(OutServerDir)"/>
<MakeDir Directories="$(OutClientDir)"/>
</Target> <Target Name="Build" DependsOnTargets="Init">
<MSBuild
Projects="$(SolutionFile)"
Targets="Rebuild"
Properties="Configuration=Release"/>
</Target> <Target Name="CopyFiles" DependsOnTargets="Build">
<Copy
SourceFiles="@(ServerDirFiles)"
DestinationFiles="@(ServerDirFiles->'$(OutServerDir)\%(RecursiveDir)%(Filename)%(Extension)')"/>
<Copy
SourceFiles="@(ClientDirFiles)"
DestinationFiles="@(ClientDirFiles->'$(OutClientDir)\%(RecursiveDir)%(Filename)%(Extension)')"/>
</Target>
</Project>

在使用这个msbuild xml文件的时候你可以写一个批处理命令:

@echo off
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\msbuild build.xml /nologo /v:m
pause

  

用msbuild构建应用的更多相关文章

  1. [Powershell]使用Msbuild构建基于.NET Framework的WebAPI项目

    查找最高版本的MsBuildTools. 清理缓存垃圾. 还原NuGet包. 构建解决方案. 按项目发布程序到本地. 按项目ZIP打包. <# .NOTES ================== ...

  2. 使用MSBUILD 构建时出错 error MSB3086: Task could not find "sgen.exe" using the SdkToolsPath的解决方法

    如果项目有添加有WB引用,比如引用其它网站的WEB服务等,那么VS在编译时会自动生成个 [项目名称].Serializers.dll的文件,就是把引用服务中的相关对象信息生成硬编码的程序集,以提高效率 ...

  3. 使用MSBUILD 构建时出错 error MSB3086: 任务未能使用 SdkToolsPath“”或注册表项“XXX”找到“LC.exe”,请确保已设置 SdkToolsPath。

    如果项目有添加有WB引用,比如引用其它网站的WEB服务等,那么VS在编译时会自动生成个 [项目名称].Serializers.dll的文件,就是把引用服务中的相关对象信息生成硬编码的程序集,以提高效率 ...

  4. 用MSBuild和Jenkins搭建持续集成环境(2)

    http://www.infoq.com/cn/articles/MSBuild-2   作者 Mustafa Saeed Haji Ali ,译者 李剑 发布于 2012年10月23日 | 注意:  ...

  5. 用MSBuild和Jenkins搭建持续集成环境(1)

     http://www.infoq.com/cn/articles/MSBuild-1 你或其他人刚刚写完了一段代码,提交到项目的版本仓库里面.但等一下,如果新提交的代码把构建搞坏了怎么办?万一出现编 ...

  6. 用MSBuild和Jenkins搭建持续集成环境 - 转

    http://www.infoq.com/cn/articles/MSBuild-1 http://www.infoq.com/cn/articles/MSBuild-2 MSBuild是在.NET ...

  7. .Net Core迁移到MSBuild的多平台编译问题

    一.前言 本篇主要讨论.NET Core应用程序项目结构的主题,重点探索.NET Core应用程序的多平台编译问题,这里指的多平台是指.NET Framework..NET Core App..NET ...

  8. jenkins部署.net平台自动化构建

    在引入自动化部署工具的时候,我们对比了jenkins和gitlab CI,jenkins有非常丰富的插件,配置起来方便.gitlab CI更倾向于脚本配置,当然jenkins也可以使用pipeline ...

  9. 用MSBuild和Jenkins搭建持续集成环境(1)[收集]

    你或其他人刚刚写完了一段代码,提交到项目的版本仓库里面.但等一下,如果新提交的代码把构建搞坏了怎么办?万一出现编译错误,或者有的测试失败了,或者代码不符合质量标准所要求的底限,你该怎么办? 最不靠谱的 ...

随机推荐

  1. C#打印条码与ZPL

    ZPL(Zebra Programming Language) 是斑马公司(做条码打印机的公司)自己设计的语言, 由于斑马打印机是如此普遍, 以至于据我所见所知, 条码打印机全部都是斑马的, 所以控制 ...

  2. NOIP 考前 队列复习

    BZOJ 1127 #include <cstdio> #include <cstring> #include <iostream> #include <al ...

  3. LPTHW 笨办法学python 33章

    32-33章节 将for-loop和while-loop循环的. 俩种句法就不说了.简单说下个人对于for和while的理解. 我觉得他learn python the hard way这里的写法是, ...

  4. B - I Hate It

    #include<cstdio> #include<string.h> using namespace std; int ans; ; ]; struct Node{ int ...

  5. ScriptableObject本地序列化后重启Unity后报The associated script can not be loaded.Please fix any compile errors and assign a valid script的坑

    踩坑 做编辑器一些设置序列化存在本地的时候,继承自ScriptableObject的类通过 创建的asset文件. 在重启Unity后查看这个asset发现上面的所有序列化属性丢失,报的错就是 在不存 ...

  6. web开发实战--图片裁剪和上传

    前言: 最近的开发中, 有一个上传头像的任务. 由于头像本身的特殊性, 其一般流程为选择图片, 编辑裁剪区域, 再继而上传图片操作. 看似简单的东西, 实则是挺麻烦的一件事. 借助这次开发机会, 来具 ...

  7. metagenome 简介

    宏基因组 ( Metagenome)(也称微生物环境基因组 Microbial Environmental Genome, 或元基因组) .是由 Handelsman 等 1998 年提出的新名词, ...

  8. android环境配置

    1.计算机右键点击属性 2.点击高级系统设置 3.选择高级——>选择环境变量 4.点击系统变量下的新建 1)新建ANDROID_HOME:你的sdk所在的目录 2)新建JAVA_HOME:C:\ ...

  9. 转换成的jar文件接收后台的信息乱码cmd解决办法

    运行——cmd——    java -jar -Dfile.encoding=utf-8 xxx.jar

  10. <a>标签的用法。

    1.创建电子邮件链接: <html> <head> <title>发给朱永成</title> </head> <body> &l ...