自动编译
前言
利用MSbuild我们可以实现批处理快速编译。
注意几点事项:
1.关于msbuild编译.net 4.5及以上语法错误的解决方法:
.net4.5以前msbuild 是在%windir%/Microsoft.NET/FrameworkXX/vXX目录下,如:C:\Windows\Microsoft.NET\Framework64\v4.0.30319,不过在使用4.5新语法后就无法编译通过,这时候就应该使用vs自带msbuild ,比如VS2017的msbuild路径为:C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin
2.如果项目中有nuget引用,首先保证nuget添加的方式正确,然后可以利用VS2017里面自带的nuget.exe,也可以将nuget.exe放置到解决方案目录下,VS2017自带的nuget目录地址:C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\SqlChangeAutomation\OctoPack\build
3.可以更SVN检出更新放在一起,实现一键化编译
@echo off rem --------------------------------- rem -------作 者:姜彦--------------- rem --------------------------------- echo 【自动发布开始】 rem SVN检出代码存放地址路径,可以直接创建,不需要手动创建 set svn_home=D:\6 rem 解决方案编译生成目录 set SlnBuildPath=D:\7 rem 解决方案名称(不带.sln) set SolutionName=AE240_Simulator rem 设置编译模式 set Configuration=Debug set LogLevel=normal rem SVN工作目录 set work_work=https://jiangyan_pc/svn/Learn/Technology/COM/COM-Observer/FRFL_WiFiTransmission rem SVN用户名 set svnUserName=******* rem SVN用户对应密码 set svnPassword=******** set /p input="是否重新创建文件夹(y/n): " if %input% == y ( rd /q/s %svn_home% md %svn_home% cd %svn_home% ) else ( cd %svn_home% ) echo 【检出代码】 svn checkout --username %svnUserName% --password %svnPassword% -q %work_work% %svn_home% echo 【检出成功】 echo 【开始编译】 rem 获取解决方案所在路径 set SolutionPath=%svn_home% rem 获取解决方案全称 set SolutionFile=%SolutionPath%\%SolutionName%.sln rem MSBuild路径此处为宏 使用VS2017下面的不要用windows里面的 set MSBuildFile=C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild rem 获取NuGet所在路径 默认在VS2017下面的路径中 set NugetExe=%MSBuildFile%\SqlChangeAutomation\OctoPack\build\NuGet.exe rem 恢复nuget引用须联网环境 set NugetArgs=restore "%SolutionFile%" rem MSBuild路径 真正路径 set MSBuildPath=%MSBuildFile%\15.0\Bin rem MSBuild路径+MSBuild.exe set MSBuildExe=%MSBuildPath%\MSBuild.exe rem ********获取正在执行的批处理所在的路径*********** cd /d %~dp0 echo %date% rem **是否编译****SVN更新版本中不启用判断语句直接编译 ::set /p input="是否编译(y/n): " ::if not %input% == y ( :: pause :: exit 0 ) rem ************************************************** rem ************获取当前年月日************************ for /f "tokens=1-4 delims=/ " %%i in ("%date%") do ( set year=%%i set month=%%j set day=%%k set down=%%l rem 星期 ) set dateStr=%year%%month%%day% rem **************************************************** rem 编译输出路径,如果不设置,默认原来解决方案自己设置好的路径 set OUTPUT_PATH=%SlnBuildPath%\%dateStr% rem 选择输出路径y:带日期时间的路径;n:解决方案默认路径 set /p input2="启动新路径(y/n): " if %input2% == y ( set MSBuildArgs1=/t:Rebuild /p:Configuration=%Configuration%;VisualStudioVersion=15.0;encoding=utf-8;append=true;logfile=%SolutionName%_%Configuration%_Build.log;OutDir=%OUTPUT_PATH%\%Configuration% /m ) else ( rem 这地方else之后什么也不设置也可以 set MSBuildArgs1=/t:Rebuild /p:Configuration=%Configuration%;VisualStudioVersion=15.0;encoding=utf-8;append=true;logfile=%SolutionName%_%Configuration%_Build.log ) set MSBuildArgs=%MSBuildArgs1% echo Initialize build parameters completed. echo NuGet Start ReStoreing... "%NugetExe%" update -Self "%NugetExe%" %NugetArgs% echo NuGet ReStore completed. echo MSBuild Start building... "%MSBuildExe%" %MSBuildArgs% "%SolutionFile%" echo MSBuild Build completed. echo 【====编译成功====】 ::@PAUSE
您的资助是我最大的动力!
金额随意,欢迎来赏!
我写的东西能让你能懂,那是义务
毕竟占用了你生命中的宝贵的时间和注意力
要是你还能喜欢我的作品,那就是缘分了
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【青青子衿】!