.Net Core 2.0在cygwin下构建

时间:2018-01-08 10:11:23

标签: .net-core-2.0

我是.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搜索的文档,但仍然没有任何线索。有人可以请赐教,谢谢。

1 个答案:

答案 0 :(得分:0)

如果您以前使用project.json构建.NET Core 1.0 / 1.1应用程序,那么迁移到csproj / MSBuild工具2.0将会很明显。

请注意,2.1和2.2版本中的SDK(!,而不是运行时)中发生了一些变化。

2.0中有两处变化:

  1. 构建执行隐式还原。这将更新obj \ project.assets.json文件,并在需要时下载缺少的nuget包。如果您在Windows中的IDE和使用不同路径的基于Linux的工具之间切换,这可能会更慢。使用--no-restore不要这样做。

  2. ASP.NET Core 2.0引入了Microsoft.AspNetCore.All元数据包,将大量的NuGet包和DLL添加到您可以从应用程序引用的构建中。 MSBuild花费大量时间在这些DLL的路径上搜索其他资源(调试符号,附加DLL,资源附属程序集)。这将在2.2工具中删除,因为事先已知所有已知资产。

  3. 此外,文件通配(在项目中发现文件)在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\以确保所有版本都看到相同的值。