MSBuild 全称 Microsoft Build Engine,代表 Microsoft 和 Visual Studio 的新的生成平台,用于生成应用程序。此引擎为项目文件提供了一个 XML 架构,用于控制生成平台处理和生成软件的方式。 Visual Studio 会使用 MSBuild,但它不依赖于 Visual Studio。 通过在你的项目或解决方案文件中调用 msbuild.exe,你可以在未安装 Visual Studio 的环境中安排和生成产品。
Visual Studio 使用 MSBuild 来加载和生成托管项目。 Visual Studio 中的项目文件(.csproj、.vbproj、vcxproj 等)包含 MSBuild XML 代码,当你使用 IDE 来生成项目时,此代码就会运行。 Visual Studio 项目会导入所有必要的设置和生成过程来执行典型的开发工作,但你可以从 Visual Studio 内或通过使用 XML 编辑器对其进行扩展或修改。
在 VS 开发中,在背后为你管理生成你的项目文件。当新建一个项目时,注意下项目文件夹中的*.*proj文件就是为MSBuild提供的,这是个文本文件,基于XML格式,里面包含有项目所包含的文件,生成配置,输出配置等信息。当把一个文件或者图片等添加到项目中,就会在这里添加一个描述,反之则删除一个描述信息;在项目属性页所做的配置也会在这里存储。
MSBuild 在如何处理和生成软件方面是完全透明的,使开发人员能够在未安装 Visual Studio 的生成实验室环境中组织和生成产品。
跑程序的时候碰到和这个有关的问题,对它一窍不通,所以不知道怎么解决,想认真学习一下。
1.MSBuild的基本概念。(√)
2.MSBuild的运行原理。(X)
3.解决从MSBuild产生的相关问题。
MSBuild 使用基于 XML 的项目文件格式,既简单又可扩展。 MSBuild 项目文件格式允许开发者描述要生成的项,以及如何针对不同的操作系统和配置生成这些项。 另外,这种项目文件格式还允许开发人员创作可重用的生成规则,这些规则可以包含到不同的文件中,以便可以在产品内的不同项目之间一致地执行生成。
以下各节介绍了 MSBuild 项目文件格式的一些基本元素。
属性表示可用于配置生成的键/值对。 属性的声明方式是:创建一个与属性同名的元素,将其指定为 PropertyGroup 元素的子元素。
// 创建一个名为 BuildDir 的属性,其值为 Build。
Build
通过在元素中放置一个 Condition 属性,你可以有条件地定义一个属性。 除非条件的计算结果为 true,否则会忽略条件元素的内容。
//定义 Configuration 元素(如果尚未定义)
Debug
在整个项目文件中,可以使用语法 $ (PropertyName) 来引用各个属性。 例如,可以使用 $(BuildDir) 和 $(Configuration) 来引用前面示例中的属性。
项是生成系统的输入,通常表示文件。 将根据用户定义的项名称,将项编组到各种项类型中。 这些项类型可以用作任务的参数,任务使用各个项来执行生成过程的步骤。
项目文件中项的声明方法是:通过创建一个与项类型同名的元素,并将其指定为 ItemGroup 元素的子元素。
//创建一个名为 Compile 的项类型,其中包括两个文件。
在整个项目文件中,可以使用语法 @(ItemType) 来引用项类型。 例如,可以使用 @(Compile) 引用示例中的项类型。
在 MSBuild 中,元素和特性名称区分大小写。 但是,属性、项和元数据名称不区分大小写。
//创建了项类型 Compile、comPile 或任何其他大小写变体,并为其指定了值“one.cs;two.cs”。
可以使用通配符声明项,并且对于更高级的生成方案,项可以包含其他元数据。
任务是 MSBuild 项目用于执行生成操作的可执行代码单元。 例如,任务可能编译输入文件或运行外部工具。 任务可以重用,并且可由不同项目中的不同开发人员共享。
任务的执行逻辑在托管代码中编写,并使用 UsingTask 元素映射到 MSBuild。 你可以通过创作一个实现 ITask 接口的托管类型来编写自己的任务。
MSBuild 包含一些可按需进行修改的常见任务。 例如,用于复制文件的复制、用于创建目录的 MakeDir 以及用于编译 Visual C# 源代码文件的 Csc。
通过创建一个与任务同名的元素,并将其指定为 Target 元素的子元素,以在 MSBuild 项目文件中执行此任务。 任务通常接受参数,参数将作为元素的特性进行传递。 MSBuild 的属性和项都可用作参数。
//调用 MakeDir 任务,并将前面示例中声明的 BuildDir 属性的值传递到该任务。
目标按特定的顺序将任务组合到一起,并将项目文件的各个部分公开为生成过程的入口点。 目标通常分组到各个逻辑部分中,以便提高可读性并实现扩展。 通过将生成步骤拆分为目标,你可以从其他目标中调用生成过程的一个部分,而不必将那部分代码复制到每个目标中。 例如,如果生成过程的多个入口点需要生成引用,你可以创建一个生成引用的目标,然后从所要求的每个入口点运行此目标。
目标是使用 Target 元素在项目文件中声明的。
// 创建一个名为 Compile 的目标,该目标随后将调用具有前面示例中声明的项列表的 Csc 任务。
在更高级的方案中,目标可用于描述彼此之间的关系并执行依赖性分析,这样,如果目标是最新的,则可以跳过生成过程的整个部分。
MSBUILD : error MSB1009: Project file does not exist.
问题描述:项目文件不存在。
确保项目文件在所使用的文件夹中,比如修改运行程序保存的文件夹位置。
这样的错误,一般是配置中”构建“中的”MSBuild Build File“的地址有错误。 ”源码管理“下的”Subversion“中的”Repository URL“中的SVN地址与下边的”构建“中的”MSBuild Build File“的地址拼接起来,应该与你*.csproj文件的地址一样,这样就不会出现这样的错误。
1
2
3
4
5 问题