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架構應用程序的簡單示例:
<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)/**/*.*" Exclude="你要排除的文件定義"/> <ClientDirFiles Include="$(ClientDir)/**/*.*" Exclude="你要排除的文件定義"/></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 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>View Code
在使用這個msbuild xml文件的時候你可以寫一個批處理命令:
@echo off%SystemRoot%/Microsoft.NET/Framework/v2.0.50727/msbuild build.xml /nologo /v:mpause
新聞熱點
疑難解答