从VS2015升级到VS2017后,构建时间大幅增加

时间:2017-10-27 16:28:09

标签: visual-studio-2017 teamcity upgrade .net-standard-2.0

简短版本:

.NET解决方案的构建时间从平均12分钟变为34分钟。

长版:

我有一个Visual Studio 2015解决方案,里面有三个项目:

  1. 面向.NET 4.5的MVC Web应用程序
  2. c#类库,适用于面向.NET 4.5的模型
  3. 用于.NET 4.5的数据访问的c#类库
  4. 使用" MSBuild"在TeamCity 2017.1.5中成功构建了解决方案。构建步骤和MSBuild 14.0工具。 TeamCity步骤具有以下标志:

    /p:DeployOnBuild=true /p:PublishProfile="%system.teamcity.build.workingDir%\WEBAPPLICATION\Properties\PublishProfiles\PUBLISHPROFILENAME.pubxml" /p:Configuration=CONFIGURATIONNAME /p:VisualStudioVersion=14.0 /p:AutoParameterizationWebConfigConnectionStrings=false /p:SkipExtraFilesOnServer=false /p:DeleteExistingFiles=true
    

    此设置已启用我们的开发服务器的持续集成/持续部署。重要的是要注意本地,我们不构建MVC视图,但 TeamCity上的构建配置首先启用MVCBuildViews 。这样可以加快我们团队在当地的发展。

    我们的大多数模型项目都需要另一个.NET项目使用。因为Microsoft不赞成使用可移植类库,并且我们的模型项目广泛使用了[Serializable]属性,而PCL不支持该属性而没有多次更改,我们决定将模型项目更改为.NET Standard 2.0库项目。最终目标是我们将使用我们的私有NuGet服务器将这个.NET Standard 2.0库项目打包为NuGet包,以便在其他项目中使用。

    我们将开发机器从Visual Studio 2015升级到Visual Studio 2017,在同一解决方案中创建了一个新的.NET Standard 2.0项目,将所有模型从旧模型项目复制到新项目,更新了所有参考资料在Web应用程序和数据访问项目中,并将Web应用程序和数据访问项目更改为目标.NET 4.6.2。该解决方案在本地成功构建,并且运行正常。

    我能够让TeamCity构建这个新版本的解决方案,确保安装代理的服务器安装了Visual Studio 2017以及4.6.2目标包(这部分很烦人)。经过大量的试验和错误,我只能让TeamCity使用批处理文件成功构建解决方案,并使用命令行构建步骤调用批处理文件。

    以下是来自TeamCity的电话:

    c:\MYBATCHFILE.bat "%system.teamcity.build.checkoutDir%" "CONFIGURATIONNAME" "PUBLISHPROFILENAME"
    

    这是批处理文件:

    "C:\Program Files\dotnet\dotnet.exe" restore %~1\NEWMODELSPROJECT
    %~1\..\..\tools\nuget.commandline.4.4.0\tools\nuget.exe restore %~1
    "C:\Program Files\dotnet\dotnet.exe" build %~1 /p:Configuration="Release"
    "c:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\msbuild.exe" %~1\DATAACCESSPROJECT\DATAACCESSPROJECT.csproj /p:Configuration=%~2 /p:Platform="AnyCpu" /p:VisualStudioVersion=15.0
    "c:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\msbuild.exe" %~1\WEBAPPLICATION\WEBAPPLICATION.csproj /p:Configuration=%~2 /p:Platform="AnyCpu" /p:VisualStudioVersion=15.0 /p:DeployOnBuild=true /p:PublishProfile=%~1\WEBAPPLICATION\Properties\PublishProfiles\%~3.pubxml /p:AutoParameterizationWebConfigConnectionStrings=false /p:SkipExtraFilesOnServer=false /p:DeleteExistingFiles=true
    

    基本上,我们在.NET Standard 2.0项目上使用dotnet还原,在其余解决方案上使用NuGet还原,使用msnet 2.0项目构建.NET标准2.0项目,然后使用MSBuild 15.0工具MSBuild解决方案中的其他两个项目以及我们之前使用的相同标志。

    我们没有在本地看到解决方案的任何问题,但在TeamCity中,我们的平均构建时间从12分钟猛增到34分钟。值得注意的是,在升级过程中,项目没有发生其他重大变化。到目前为止,最大的时间是MvcBuildViews。以下是构建日志的高度编辑版本,取自TeamCity:

    [10:50:07]  The build is removed from the queue to be prepared for the start
    ...
    //all other steps of the build complete in this amount of time
    ...
    [10:50:21]  Step 8/15: Run Batch (Command Line) (33m:28s)
    ...
    //the other portions of the above batch file run in this time period
    ...
    [10:51:15]  MvcBuildViews:
    ...
    [11:23:50]  
    [11:23:50]      104 Warning(s)
    [11:23:50]      0 Error(s)
    [11:23:50]  
    [11:23:50]  Time Elapsed 00:33:16.53
    [11:23:50]  Process exited with code 0
    ...
    //minor clean up steps
    ...
    [11:23:53]  Build finished
    

    无论批处理文件是由TeamCity运行还是从命令行手动运行,这些平均时间都是相同的。那么,直截了当地说,MSBuild 14.0和MSBuild 15.0之间发生了什么MVCBuildViews任务需要3倍的时间?是否有标记或选项可以传递给MVCBuildViews以改善构建时间?

0 个答案:

没有答案