我是.NET Core begginer,我有几个项目依赖于proj_core
proj1 proj2 ... ... proj_core
和一个简单的文件build.sh在cygwin下运行:
build_one_proj()
{
...
dotnet build --configuration Debug --output "../bin" --framework $NETCOREVER
...
}
build_one_proj proj1
build_one_proj proj2
...
升级到.NET Core 2.0(相同的build.sh)之后执行的操作会有所不同:
.NET Core 1.1:缩短构建时间(平均时间<20秒),控制台输出仅显示已修改的项目。
.NET Core 2.0:长构建时间(平均时间> 60秒),根据输出我猜所有项目都要构建,特别是proj_core会重复构建。
我阅读了有关构建选项和google搜索的文档,但仍然没有任何线索。有人可以请赐教,谢谢。
答案 0 :(得分:0)
如果您以前使用project.json
构建.NET Core 1.0 / 1.1应用程序,那么迁移到csproj / MSBuild工具2.0将会很明显。
请注意,2.1和2.2版本中的SDK(!,而不是运行时)中发生了一些变化。
2.0中有两处变化:
构建执行隐式还原。这将更新obj \ project.assets.json文件,并在需要时下载缺少的nuget包。如果您在Windows中的IDE和使用不同路径的基于Linux的工具之间切换,这可能会更慢。使用--no-restore
不要这样做。
ASP.NET Core 2.0引入了Microsoft.AspNetCore.All
元数据包,将大量的NuGet包和DLL添加到您可以从应用程序引用的构建中。 MSBuild花费大量时间在这些DLL的路径上搜索其他资源(调试符号,附加DLL,资源附属程序集)。这将在2.2工具中删除,因为事先已知所有已知资产。
此外,文件通配(在项目中发现文件)在2.1 CLI中比在2.0中更快。但是当有一个非常大的目录(例如node_modules
)并不需要时,最好将其排除。 ASP.NET Core将在项目根级别中排除node_modules
文件夹,但如果在另一个位置存在另一个文件夹,或者该项目不是ASP.NET Core,则设置可能更快: / p>
<DefaultItemExcludes>$(DefaultItemExcludes);path\to\node_modules\**</DefaultItemExcludes>
MSBuild会识别此模式,甚至不会考虑枚举此目录的内容。
你也传递了一个&#34;输出&#34;参数。请注意,当使用不同的参数调用项目时,这会导致一些额外的构建时间,例如:如果未使用此参数,则通过IDE或构建为引用项目。
我建议在csproj文件的<OutputPath>path\to\dir\</OutputPath>
中设置PropertyGroup
,或在解决方案目录中创建Directory.Build.props
文件,将其设置为$(MSBuildThisFileDirectory)bin\
以确保所有版本都看到相同的值。