您的位置:首页 > 产品设计 > UI/UE

[置顶] vs2017 msbuild命令编译项目文件

2017-09-11 14:57 465 查看
最近研究使用发布机发布项目,固然需要使用命令行来编译项目文件,此次的编译使用的是msbuild,也是当下官方推荐;当然还有devenv;

另外说明:本次的实验使用的为Visual Studio 2017

相关参考

MSDN : MSBuild使用及一些说明

指令目录说明

在vs2017之前,msbuild都是跟随.net framework一起发布,在vs2017后需要兼容.net core的编译,所以与vs打包整合了,如果用的是visual studio 2017或者使用了c# 5.0中的新特性,建议使用msbuild V15.0的版本来编译;V15.0的目录也是在visual studio的安装目录下有单独的msbuild目录。

指令语法

指令的使用语法

MSBuild.exe [选项] [项目文件 | 目录]

常用开关

开关开关缩写描述示例
/target:/t:在此项目中生成这些目标。使用分号或逗号分隔多个目标,或者分别指定每个目标。/target:Resources;Compile
/property:< n >=< v >/p:设置或重写这些项目级属性。< n > 是属性名,< v > 为属性值。请使用分号或逗号分隔多个属性,或者分别指定每个属性。/property:WarningLevel=2;OutDir=bin\Debug\
/toolsversion:< version >/tv要在生成过程中使用的 MSBuild 工具集(任务、目标等)的版本。此版本将重写个别项目指定的版本/toolsversion:3.5
的以上常用的指令中用的最多的为前两个 /target:和/property:,target用来指定生成项目的目标等;而/property则是一相相当重要的开关属性了下面来特别说明它是如何重要的。

开关讲解

/Property:< n >= < v >

首先来看我们的项目文件.csproj文件中的一个片段

<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>


示例中我们可以看到有请多的宏定义$(MSBuildBinPath)、$(VSToolsPath)等,而这些宏是可以使用/property来进行定义的;也就是说.csproj文件中的宏都可以使用/property来进行定义;下面来看一个例子:

命令如下:

msbuild d:\Projects\Web\Web.csproj /t:ResolveReferences;Compile /t:_WPPCopyWebApplication /p:Configuration=Release /p:WebProjectOutputDir=d:\website

在项目中使用了生成事件,copy了一个文件;使用了$(SolutionDir)的宏指令

执行后的错误提示:



解决办法:

添加 /p 开关如下 :/p:SolutionDir=’指定的路经’ 这样问题就解决了

扩展问题:如果自定义一些宏了,可以使用/property来定义吗?

结语

好了,先写这么多,很久没有写blog了,感觉写出来有头没尾,草草的结个尾
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: