-
Notifications
You must be signed in to change notification settings - Fork 10.4k
Build primarily with dotnet msbuild
#22017
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
a61cf32
a5741d5
ac3fe49
dd70fd5
089e624
fdd6ccc
9f038b5
648cc82
7d9dad7
3b149b5
5baad6b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -47,7 +47,8 @@ variables: | |
- ${{ if eq(variables['System.TeamProject'], 'internal') }}: | ||
- group: DotNet-MSRC-Storage | ||
- name: _InternalRuntimeDownloadArgs | ||
value: -DotNetRuntimeSourceFeed https://dotnetclimsrc.blob.core.windows.net/dotnet -DotNetRuntimeSourceFeedKey $(dotnetclimsrc-read-sas-token-base64) /p:DotNetAssetRootAccessTokenSuffix='$(dotnetclimsrc-read-sas-token-base64)' | ||
value: -DotNetRuntimeSourceFeed https://dotnetclimsrc.blob.core.windows.net/dotnet -DotNetRuntimeSourceFeedKey | ||
$(dotnetclimsrc-read-sas-token-base64) /p:DotNetAssetRootAccessTokenSuffix='$(dotnetclimsrc-read-sas-token-base64)' | ||
# The code signing doesn't use the aspnet build scripts, so the msbuild parameters have | ||
# to be passed directly. This is awkward, since we pass the same info above, but we have | ||
# to have it in two different forms | ||
|
@@ -140,32 +141,35 @@ stages: | |
- script: ./build.cmd | ||
-ci | ||
-nobl | ||
-noBuildRepoTasks | ||
-arch x86 | ||
-pack | ||
-all | ||
-noBuildJava | ||
-noBuildNative | ||
/p:OnlyPackPlatformSpecificPackages=true | ||
$(_BuildArgs) | ||
$(_InternalRuntimeDownloadArgs) | ||
displayName: Build x86 | ||
|
||
# This is in a separate build step with -forceCoreMsbuild to workaround MAX_PATH limitations - https://github.com/Microsoft/msbuild/issues/53 | ||
- script: .\src\SiteExtensions\build.cmd | ||
-ci | ||
-nobl | ||
-noBuildRepoTasks | ||
-pack | ||
-noBuildDeps | ||
$(_BuildArgs) | ||
$(_InternalRuntimeDownloadArgs) | ||
condition: ne(variables['Build.Reason'], 'PullRequest') | ||
displayName: Build SiteExtension | ||
|
||
# This runs code-signing on all packages, zips, and jar files as defined in build/CodeSign.targets. If https://github.com/dotnet/arcade/issues/1957 is resolved, | ||
# consider running code-signing inline with the other previous steps. | ||
# Sign check is disabled because it is run in a separate step below, after installers are built. | ||
# This runs code-signing on all packages, zips, and jar files as defined in build/CodeSign.targets. If | ||
# https://github.com/dotnet/arcade/issues/1957 is resolved, consider running code-signing inline with the other | ||
# previous steps. Sign check is disabled because it is run in a separate step below, after installers are built. | ||
- script: ./build.cmd | ||
-ci | ||
-nobl | ||
-noBuildRepoTasks | ||
-noBuild | ||
-noRestore | ||
-sign | ||
|
@@ -177,6 +181,7 @@ stages: | |
- script: ./build.cmd | ||
-ci | ||
-nobl | ||
-noBuildRepoTasks | ||
-sign | ||
-buildInstallers | ||
/p:DotNetSignType=$(_SignType) | ||
|
@@ -492,7 +497,9 @@ stages: | |
jobDisplayName: "Test: Windows Server 2016 x64" | ||
agentOs: Windows | ||
isTestingJob: true | ||
buildArgs: -all -pack -test "/p:SkipHelixReadyTests=true /p:SkipIISNewHandlerTests=true /p:SkipIISTests=true /p:SkipIISExpressTests=true /p:SkipIISNewShimTests=true /p:RunTemplateTests=false" $(_InternalRuntimeDownloadArgs) | ||
buildArgs: -all -pack -test /p:SkipHelixReadyTests=true /p:SkipIISNewHandlerTests=true /p:SkipIISTests=true | ||
/p:SkipIISExpressTests=true /p:SkipIISNewShimTests=true /p:RunTemplateTests=false | ||
$(_InternalRuntimeDownloadArgs) | ||
beforeBuild: | ||
- powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1" | ||
displayName: Setup IISExpress test certificates and schema | ||
|
@@ -530,9 +537,9 @@ stages: | |
steps: | ||
- script: ./build.cmd -ci -nobl -all -pack $(_InternalRuntimeDownloadArgs) | ||
displayName: Build Repo | ||
- script: ./src/ProjectTemplates/build.cmd -ci -nobl -pack -NoRestore -NoBuilddeps "/p:RunTemplateTests=true" | ||
- script: ./src/ProjectTemplates/build.cmd -ci -nobl -noBuildRepoTasks -pack -NoRestore -NoBuilddeps "/p:RunTemplateTests=true" | ||
displayName: Pack Templates | ||
- script: ./src/ProjectTemplates/build.cmd -ci -nobl -test -NoRestore -NoBuild -NoBuilddeps "/p:RunTemplateTests=true" | ||
- script: ./src/ProjectTemplates/build.cmd -ci -nobl -noBuildRepoTasks -test -NoRestore -NoBuild -NoBuilddeps "/p:RunTemplateTests=true" | ||
displayName: Test Templates | ||
artifacts: | ||
- name: Windows_Test_Templates_Dumps | ||
|
@@ -632,9 +639,11 @@ stages: | |
# Build the shared framework | ||
- script: ./build.cmd -ci -nobl -all -pack -arch x64 /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log | ||
displayName: Build shared fx | ||
- script: .\restore.cmd -ci -nobl /p:BuildInteropProjects=true | ||
- script: ./build.cmd -ci -nobl -noBuildRepoTasks -restore -noBuild -projects src/Grpc/**/*.csproj | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Previously this would restore everything again, plus the interop projects. That's a waste and doesn't work correctly because |
||
displayName: Restore interop projects | ||
- script: .\build.cmd -ci -nobl -NoRestore -test -all -projects eng\helix\helix.proj /p:IsRequiredCheck=true /p:IsHelixJob=true /p:BuildInteropProjects=true /p:RunTemplateTests=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log | ||
- script: ./build.cmd -ci -nobl -noBuildRepoTasks -noRestore -test -all -noBuildNative -projects eng\helix\helix.proj | ||
/p:IsRequiredCheck=true /p:IsHelixJob=true /p:BuildInteropProjects=true /p:RunTemplateTests=true | ||
/p:ASPNETCORE_TEST_LOG_DIR=artifacts/log | ||
displayName: Run build.cmd helix target | ||
env: | ||
HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -30,6 +30,7 @@ jobs: | |
flattenFolders: true | ||
- powershell: .\eng\common\build.ps1 | ||
-ci | ||
-nobl | ||
-restore | ||
-sign | ||
-publish | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -104,11 +104,16 @@ jobs: | |
${{ if eq(parameters.agentOs, 'Windows') }}: | ||
${{ if eq(variables['System.TeamProject'], 'public') }}: | ||
name: NetCorePublic-Pool | ||
queue: BuildPool.Windows.10.Amd64.VS2019.Pre.Open | ||
${{ if ne(parameters.isTestingJob, true) }}: | ||
# Visual Studio Build Tools | ||
queue: BuildPool.Server.Amd64.VS2019.BT.Open | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yup, we don't need the preview queues anymore 😺 |
||
${{ if eq(parameters.isTestingJob, true) }}: | ||
# Visual Studio Enterprise - contains some stuff, like SQL Server and IIS Express, that we use for testing | ||
queue: BuildPool.Server.Amd64.VS2019.Open | ||
${{ if eq(variables['System.TeamProject'], 'internal') }}: | ||
name: NetCoreInternal-Pool | ||
# Visual Studio Enterprise - contains some stuff, like SQL Server and IIS Express, that we use for testing | ||
queue: BuildPool.Windows.10.Amd64.VS2019.Pre | ||
queue: BuildPool.Server.Amd64.VS2019 | ||
variables: | ||
- AgentOsName: ${{ parameters.agentOs }} | ||
- ASPNETCORE_TEST_LOG_MAXPATH: "200" # Keep test log file name length low enough for artifact zipping | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -180,7 +180,7 @@ | |
<!-- Projects which reference Microsoft.AspNetCore.Mvc.Testing should import this targets file to ensure dependency .deps.json files are copied into test output. --> | ||
<MvcTestingTargets>$(MSBuildThisFileDirectory)src\Mvc\Mvc.Testing\src\Microsoft.AspNetCore.Mvc.Testing.targets</MvcTestingTargets> | ||
<!-- IIS native projects can only be built on Windows for x86 and x64. --> | ||
<BuildIisNativeProjects Condition=" $(BuildNative) AND ('$(TargetArchitecture)' == 'x86' OR '$(TargetArchitecture)' == 'x64') ">true</BuildIisNativeProjects> | ||
<BuildIisNativeProjects Condition=" '$(TargetOsName)' == 'win' AND ('$(TargetArchitecture)' == 'x86' OR '$(TargetArchitecture)' == 'x64') ">true</BuildIisNativeProjects> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What's the motivation for this logical change? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The |
||
<!-- This property is shared by several projects to layout the AspNetCore.App targeting pack for installers --> | ||
<TargetingPackLayoutRoot>$(ArtifactsObjDir)TargetingPack.Layout\$(Configuration)\</TargetingPackLayoutRoot> | ||
<!-- This property is shared by several projects to layout the AspNetCore.App shared framework for installers --> | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -146,9 +146,8 @@ param( | |
|
||
[switch]$NoBuildRepoTasks, | ||
|
||
# By default, Windows builds will use MSBuild.exe. Passing this will force the build to run on | ||
# dotnet.exe instead, which may cause issues if you invoke build on a project unsupported by | ||
# MSBuild for .NET Core | ||
# Disable pre-build of C++ code in x64 (default) and x86 builds. Affects -All and -Projects handling and causes | ||
# -BuildInstallers and -BuildNative to be ignored. | ||
[switch]$ForceCoreMsbuild, | ||
|
||
# Diagnostics | ||
|
@@ -187,10 +186,6 @@ if ($DumpProcesses -or $CI) { | |
} | ||
|
||
# Project selection | ||
if ($All) { | ||
$MSBuildArguments += '/p:BuildAllProjects=true' | ||
} | ||
|
||
if ($Projects) { | ||
if (![System.IO.Path]::IsPathRooted($Projects)) | ||
{ | ||
|
@@ -227,20 +222,8 @@ if ($BuildManaged -or ($All -and (-not $NoBuildManaged))) { | |
} | ||
} | ||
|
||
if ($BuildInstallers) { $MSBuildArguments += "/p:BuildInstallers=true" } | ||
if ($BuildManaged) { $MSBuildArguments += "/p:BuildManaged=true" } | ||
if ($BuildNative) { $MSBuildArguments += "/p:BuildNative=true" } | ||
if ($BuildNodeJS) { $MSBuildArguments += "/p:BuildNodeJS=true" } | ||
if ($BuildJava) { $MSBuildArguments += "/p:BuildJava=true" } | ||
|
||
if ($NoBuildDeps) { $MSBuildArguments += "/p:BuildProjectReferences=false" } | ||
|
||
if ($NoBuildInstallers) { $MSBuildArguments += "/p:BuildInstallers=false" } | ||
if ($NoBuildManaged) { $MSBuildArguments += "/p:BuildManaged=false" } | ||
if ($NoBuildNative) { $MSBuildArguments += "/p:BuildNative=false" } | ||
if ($NoBuildNodeJS) { $MSBuildArguments += "/p:BuildNodeJS=false" } | ||
if ($NoBuildJava) { $MSBuildArguments += "/p:BuildJava=false" } | ||
|
||
$RunBuild = if ($NoBuild) { $false } else { $true } | ||
|
||
# Run restore by default unless -NoRestore is set. | ||
|
@@ -276,6 +259,30 @@ if ($DotNetRuntimeSourceFeed -or $DotNetRuntimeSourceFeedKey) { | |
$ToolsetBuildArguments += $runtimeFeedKeyArg | ||
} | ||
|
||
# Split build categories between dotnet msbuild and desktop msbuild. Use desktop msbuild as little as possible. | ||
[string[]]$dotnetBuildArguments = $MSBuildArguments | ||
if ($All) { $dotnetBuildArguments += '/p:BuildAllProjects=true'; $BuildNative = $true } | ||
|
||
if ($NoBuildInstallers) { $MSBuildArguments += "/p:BuildInstallers=false"; $BuildInstallers = $false } | ||
if ($BuildInstallers) { $MSBuildArguments += "/p:BuildInstallers=true" } | ||
if ($NoBuildNative) { $MSBuildArguments += "/p:BuildNative=false"; $BuildNative = $false } | ||
if ($BuildNative) { $MSBuildArguments += "/p:BuildNative=true"} | ||
|
||
if ($NoBuildJava) { $dotnetBuildArguments += "/p:BuildJava=false"; $BuildJava = $false } | ||
if ($BuildJava) { $dotnetBuildArguments += "/p:BuildJava=true" } | ||
if ($NoBuildManaged) { $dotnetBuildArguments += "/p:BuildManaged=false"; $BuildManaged = $false } | ||
if ($BuildManaged) { $dotnetBuildArguments += "/p:BuildManaged=true" } | ||
if ($NoBuildNodeJS) { $dotnetBuildArguments += "/p:BuildNodeJS=false"; $BuildNodeJS = $false } | ||
if ($BuildNodeJS) { $dotnetBuildArguments += "/p:BuildNodeJS=true" } | ||
|
||
# Don't bother with two builds if just one will build everything. Ignore super-weird cases like | ||
# "-Projects ... -NoBuildJava -NoBuildManaged -NoBuildNodeJS". | ||
$ForceCoreMsbuild = $ForceCoreMsbuild -or -not ($BuildInstallers -or $BuildNative) -or ` | ||
$Architecture.StartsWith("arm", [System.StringComparison]::OrdinalIgnoreCase) | ||
$performDotnetBuild = $ForceCoreMsbuild -or $BuildJava -or $BuildManaged -or $BuildNodeJS -or ` | ||
($All -and -not ($NoBuildJava -and $NoBuildManaged -and $NoBuildNodeJS)) -or ` | ||
($Projects -and -not ($BuildInstallers -or $BuildNative)) | ||
|
||
$foundJdk = $false | ||
$javac = Get-Command javac -ErrorAction Ignore -CommandType Application | ||
$localJdkPath = "$PSScriptRoot\.tools\jdk\win-x64\" | ||
|
@@ -343,9 +350,8 @@ $env:MSBUILDDISABLENODEREUSE=1 | |
# Fixing this is tracked by https://github.com/dotnet/aspnetcore-internal/issues/601 | ||
$warnAsError = $false | ||
|
||
if ($ForceCoreMsbuild) { | ||
$msbuildEngine = 'dotnet' | ||
} | ||
# Use `dotnet msbuild` by default | ||
$msbuildEngine = 'dotnet' | ||
|
||
# Ensure passing neither -bl nor -nobl on CI avoids errors in tools.ps1. This is needed because both parameters are | ||
# $false by default i.e. they always exist. (We currently avoid binary logs but that is made visible in the YAML.) | ||
|
@@ -367,7 +373,16 @@ Remove-Item variable:global:_MSBuildExe -ea Ignore | |
if ($BinaryLog) { | ||
$bl = GetMSBuildBinaryLogCommandLineArgument($MSBuildArguments) | ||
if (-not $bl) { | ||
$MSBuildArguments += "/bl:" + (Join-Path $LogDir "Build.binlog") | ||
$dotnetBuildArguments += "/bl:" + (Join-Path $LogDir "Build.binlog") | ||
$MSBuildArguments += "/bl:" + (Join-Path $LogDir "Build.native.binlog") | ||
$ToolsetBuildArguments += "/bl:" + (Join-Path $LogDir "Build.repotasks.binlog") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not relevant in CI but will be helpful when we re-enable binary logs. |
||
} else { | ||
# Use a different binary log path when running desktop msbuild if doing both builds. | ||
if (-not $ForceCoreMsbuild -and $performDotnetBuild) { | ||
$MSBuildArguments += [System.IO.Path]::ChangeExtension($bl, "native.binlog") | ||
} | ||
|
||
$ToolsetBuildArguments += [System.IO.Path]::ChangeExtension($bl, "repotasks.binlog") | ||
} | ||
} elseif ($CI) { | ||
# Ensure the artifacts/log directory isn't empty to avoid warnings. | ||
|
@@ -394,6 +409,8 @@ try { | |
} | ||
|
||
if (-not $NoBuildRepoTasks) { | ||
Write-Host | ||
|
||
MSBuild $toolsetBuildProj ` | ||
/p:RepoRoot=$RepoRoot ` | ||
/p:Projects=$EngRoot\tools\RepoTasks\RepoTasks.csproj ` | ||
|
@@ -404,9 +421,21 @@ try { | |
@ToolsetBuildArguments | ||
} | ||
|
||
MSBuild $toolsetBuildProj ` | ||
/p:RepoRoot=$RepoRoot ` | ||
@MSBuildArguments | ||
if (-not $ForceCoreMsbuild) { | ||
Write-Host | ||
Remove-Item variable:global:_BuildTool -ErrorAction Ignore | ||
$msbuildEngine = 'vs' | ||
|
||
MSBuild $toolsetBuildProj /p:RepoRoot=$RepoRoot @MSBuildArguments | ||
} | ||
|
||
if ($performDotnetBuild) { | ||
Write-Host | ||
Remove-Item variable:global:_BuildTool -ErrorAction Ignore | ||
$msbuildEngine = 'dotnet' | ||
|
||
MSBuild $toolsetBuildProj /p:RepoRoot=$RepoRoot @dotnetBuildArguments | ||
} | ||
} | ||
catch { | ||
Write-Host $_.ScriptStackTrace | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,7 +5,8 @@ | |
<Import Project="SharedFramework.Local.props" /> | ||
|
||
<!-- This is temporary until we can use FrameworkReference to build our own packages. --> | ||
<Target Name="RemoveSharedFrameworkOnlyRefsFromNuspec" AfterTargets="Pack"> | ||
<Target Name="RemoveSharedFrameworkOnlyRefsFromNuspec" AfterTargets="Pack" | ||
Condition=" '$(MSBuildRuntimeType)' == 'core' "> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. why was the condition added? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. A single |
||
<ItemGroup> | ||
<_BuildOutput Include="$(ArtifactsShippingPackagesDir)*.nupkg" | ||
Exclude="$(ArtifactsShippingPackagesDir)*.symbols.nupkg" /> | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -84,14 +84,12 @@ | |
Include="$(RepoRoot)src\Installers\Rpm\**\*.*proj" /> | ||
</ItemGroup> | ||
|
||
<ItemGroup> | ||
<NativeProjects Condition=" '$(TargetOsName)' == 'win' AND ('$(TargetArchitecture)' == 'x86' OR '$(TargetArchitecture)' == 'x64') " | ||
Include="$(RepoRoot)src\**\*.vcxproj" Exclude="@(ProjectToExclude)"> | ||
<!-- Required to prevent triggering double-builds. See src\Servers\IIS\ResolveIisReferences.targets for details. --> | ||
<AdditionalProperties Condition="'$(TargetArchitecture)' == 'x64'">Platform=x64</AdditionalProperties> | ||
<AdditionalProperties Condition="'$(TargetArchitecture)' == 'x86'">Platform=Win32</AdditionalProperties> | ||
</NativeProjects> | ||
<ItemGroup Condition=" '$(TargetOsName)' == 'win' AND ('$(TargetArchitecture)' == 'x86' OR '$(TargetArchitecture)' == 'x64') "> | ||
<NativeProjects Include="$(RepoRoot)src\**\*.vcxproj" Exclude="@(ProjectToExclude)" AdditionalProperties="Platform=x64" /> | ||
<NativeProjects Include="$(RepoRoot)src\**\*.vcxproj" Exclude="@(ProjectToExclude)" AdditionalProperties="Platform=Win32" /> | ||
</ItemGroup> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I was concerned about doing both of the |
||
|
||
<ItemGroup> | ||
<ProjectToBuild Condition=" $(BuildNative) " Include="@(NativeProjects)" Exclude="@(ProjectToExclude)" /> | ||
<ProjectToExclude Condition=" !$(BuildNative) " Include="@(NativeProjects)" /> | ||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This and the
-noBuildNative
additions are minor optimizations that also decrease the noise in the builds