<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Condition="Exists('..\dir.props')" Project="..\dir.props" /> <!-- We shipped assembly file version 4.6.x up until the end of rc3. Version assembly as 4.6.x to ensure compatability in Visual Studio for an in-place update. --> <PropertyGroup> <MajorVersion>4</MajorVersion> <MinorVersion>6</MinorVersion> </PropertyGroup> <!-- Define vNext UAP Moniker --> <PropertyGroup> <UAPvNextVersion>10.0.16300</UAPvNextVersion> <UAPvNextTFMFull>UAP,Version=v$(UAPvNextVersion)</UAPvNextTFMFull> <UAPvNextTFM>uap$(UAPvNextVersion)</UAPvNextTFM> </PropertyGroup> <Import Condition="Exists('$(MSBuildProjectDirectory)/Configurations.props')" Project="$(MSBuildProjectDirectory)/Configurations.props" /> <!-- Informs build tools to apply .NET Framework metadata if not a test project --> <PropertyGroup> <IsDotNetFrameworkProductAssembly>true</IsDotNetFrameworkProductAssembly> </PropertyGroup> <!-- Indicates this is not an officially supported release. Release branches should set this to false. --> <PropertyGroup> <IsPrerelease>false</IsPrerelease> </PropertyGroup> <!-- Common repo directories --> <PropertyGroup> <ProjectDir>$(MSBuildThisFileDirectory)</ProjectDir> <SourceDir>$(ProjectDir)src\</SourceDir> <!-- This name is used to create a GIT repository URL https://github.com/dotnet/$(GitHubRepositoryName) used to find source code for debugging --> <GitHubRepositoryName Condition="'$(GitHubRepositoryName)' == ''">corefx</GitHubRepositoryName> <!-- Output directories --> <BinDir Condition="'$(BinDir)'==''">$(ProjectDir)bin/</BinDir> <ObjDir Condition="'$(ObjDir)'==''">$(BinDir)obj/</ObjDir> <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'==''">$(ObjDir)</BaseIntermediateOutputPath> <TestWorkingDir Condition="'$(TestWorkingDir)'==''">$(BinDir)tests/</TestWorkingDir> <PackageOutputRoot Condition="'$(PackageOutputRoot)'=='' and '$(NonShippingPackage)' == 'true'">$(BinDir)packages_noship/</PackageOutputRoot> <PackageOutputRoot Condition="'$(PackageOutputRoot)'==''">$(BinDir)packages/</PackageOutputRoot> <!-- Input Directories --> <PackagesDir>$(DotNetRestorePackagesPath)</PackagesDir> <PackagesDir Condition="'$(PackagesDir)'==''">$(ProjectDir)packages/</PackagesDir> <ToolsDir Condition="'$(ToolsDir)'==''">$(ProjectDir)Tools/</ToolsDir> <IlasmToolPath>$(ToolsDir)ilasm/ilasm</IlasmToolPath> <CodeAnalysisRuleset>$(MSBuildThisFileDirectory)CodeAnalysis.ruleset</CodeAnalysisRuleset> </PropertyGroup> <!-- Import Build tools common props file where repo-independent properties are found --> <Import Project="$(ToolsDir)Build.Common.props" Condition="Exists('$(ToolsDir)Build.Common.props')" /> <!-- Enable the analyzers for this repo --> <PropertyGroup> <EnableDotnetAnalyzers Condition="'$(EnableDotnetAnalyzers)'==''">true</EnableDotnetAnalyzers> </PropertyGroup> <!-- Default properties for CI builds --> <PropertyGroup Condition="'$(IsCIBuild)' == 'true'"> <WithoutCategories>IgnoreForCI</WithoutCategories> <EnableDumpling>true</EnableDumpling> <CrashDumpFolder Condition="'$(RunningOnUnix)' != 'true'">%TMP%\CoreRunCrashDumps</CrashDumpFolder> </PropertyGroup> <!-- Provides package dependency version properties and verification/auto-upgrade configuration --> <Import Project="$(MSBuildThisFileDirectory)dependencies.props" /> <!-- list of nuget package sources passed to nuget restore --> <!-- Example to consume local CoreCLR package: /p:OverridePackageSource=C:\coreclr\bin\Product\Windows_NT.x64.Debug\.nuget\pkg --> <PropertyGroup> <RestoreSources Condition="'$(DotNetBuildOffline)' != 'true'"> https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json; https://dotnet.myget.org/F/dotnet-buildtools/api/v3/index.json; https://dotnet.myget.org/F/dotnet-core/api/v3/index.json; https://api.nuget.org/v3/index.json; $(OverridePackageSource); $(RestoreSources) </RestoreSources> </PropertyGroup> <PropertyGroup> <!-- By default make all libraries to be AnyCPU but individual projects can override it if they need to --> <Platform>AnyCPU</Platform> <OutputType>Library</OutputType> <!-- Default any assembly not specifying a key to use the Open Key --> <AssemblyKey>Open</AssemblyKey> <RunApiCompat>true</RunApiCompat> <!-- Build as portable by default --> <PortableBuild Condition="'$(PortableBuild)' == ''">true</PortableBuild> </PropertyGroup> <PropertyGroup Condition="'$(BuildingInsideVisualStudio)' == 'true' and '$(Configuration)' != ''"> <!-- When building in VS setup the ConfigurationGroup based on the given Configuration --> <ConfigurationGroup Condition="$(Configuration.EndsWith('Debug'))">Debug</ConfigurationGroup> <ConfigurationGroup Condition="$(Configuration.EndsWith('Release'))">Release</ConfigurationGroup> </PropertyGroup> <PropertyGroup> <!-- These *Group properties are only intended to enable passing them individually at the command line to initialize BuildConfiguration. They will be overwritten by our configurations/configuration.props file and defaulted based on Configuration for the individual projects which is selected based on BuildConfiguration. See Documentation/coding-guidelines/project-guidelines.md for more details on our configurations. --> <TargetGroup Condition="'$(TargetGroup)' == ''">netcoreapp</TargetGroup> <OSGroup Condition="'$(OSGroup)' == ''">$(DefaultOSGroup)</OSGroup> <ConfigurationGroup Condition="'$(ConfigurationGroup)' == ''">Debug</ConfigurationGroup> <ArchGroup Condition="'$(ArchGroup)' == ''">x64</ArchGroup> <!-- Initialize BuildConfiguration from the individual properties if it wasn't already explicitly set --> <BuildConfiguration Condition="'$(BuildConfiguration)' == ''">$(TargetGroup)-$(OSGroup)-$(ConfigurationGroup)-$(ArchGroup)</BuildConfiguration> <BuildConfigurationFolder>$(ToolsDir)configuration</BuildConfigurationFolder> <BuildConfigurationImportFile>$(BuildConfigurationFolder)/configuration.props</BuildConfigurationImportFile> <!-- if PKGPROJ doesn't set BuildConfigurations, make sure it only builds for TargetGroup=package or BuildAllConfigurations --> <BuildConfigurations Condition="'$(MSBuildProjectExtension)' == '.pkgproj' AND '$(BuildConfigurations)' == ''">package</BuildConfigurations> <!-- Need to try and keep the same logic as the native builds as we need this for packaging --> <NativeBinDir>$(BinDir)$(OSGroup).$(ArchGroup).$(ConfigurationGroup)/native</NativeBinDir> </PropertyGroup> <Import Project="$(BuildConfigurationImportFile)" Condition="Exists('$(BuildConfigurationImportFile)')" /> <PropertyGroup> <_runtimeOSVersionIndex>$(RuntimeOS.IndexOfAny(".-0123456789"))</_runtimeOSVersionIndex> <_runtimeOSFamily Condition="'$(_runtimeOSVersionIndex)' != '-1'">$(RuntimeOS.SubString(0, $(_runtimeOSVersionIndex)))</_runtimeOSFamily> <_portableOS>linux</_portableOS> <_portableOS Condition="'$(_runtimeOSFamily)' == 'win'">win</_portableOS> <_portableOS Condition="'$(_runtimeOSFamily)' == 'osx'">osx</_portableOS> <_runtimeOS>$(RuntimeOS)</_runtimeOS> <_runtimeOS Condition="'$(_runtimeOS)' == 'tizen.4.0.0'">ubuntu.14.04</_runtimeOS> <_runtimeOS Condition="'$(PortableBuild)' == 'true'">$(_portableOS)</_runtimeOS> <ToolRuntimeRID>$(_runtimeOS)-x64</ToolRuntimeRID> <!-- support cross-targeting by choosing a RID to restore when running on a different machine that what we're build for --> <_portableOS Condition="'$(OSGroup)' == 'Unix' AND '$(_runtimeOSFamily)' != 'osx'">linux</_portableOS> <_portableOS Condition="'$(OSGroup)' == 'Windows_NT'">win</_portableOS> <_packageRID/> <_packageRID Condition="'$(PortableBuild)' == 'true'">$(_portableOS)-$(ArchGroup)</_packageRID> <_packageRID Condition="$(TargetGroup.StartsWith('uap'))">win10-$(ArchGroup)</_packageRID> <_packageRID Condition="$(TargetGroup.EndsWith('aot'))">win10-$(ArchGroup)-aot</_packageRID> <PackageRID Condition="'$(PackageRID)' == ''">$(_packageRID)</PackageRID> <PackageRID Condition="'$(PackageRID)' == ''">$(RuntimeOS)-$(ArchGroup)</PackageRID> </PropertyGroup> <!-- Set some shortcuts for more terse conditions in project files --> <PropertyGroup> <TargetsNetCoreApp Condition="$(TargetGroup.StartsWith('netcoreapp'))">true</TargetsNetCoreApp> <TargetsUap Condition="$(TargetGroup.StartsWith('uap'))">true</TargetsUap> <TargetsNetFx Condition="$(TargetGroup.StartsWith('net4')) OR '$(TargetGroup)' == 'netfx'">true</TargetsNetFx> </PropertyGroup> <!-- Import packaging props --> <Import Project="$(MSBuildThisFileDirectory)Packaging.props"/> <!-- set properties for each vertical --> <PropertyGroup> <BuildingNETCoreAppVertical Condition="'$(BuildingNETCoreAppVertical)' == '' AND ('$(_bc_TargetGroup)'=='netcoreapp' OR '$(BuildAllConfigurations)' == 'true')">true</BuildingNETCoreAppVertical> <BuildingNETFxVertical Condition="'$(BuildingNETFxVertical)' == '' AND ('$(_bc_TargetGroup)'=='netfx' OR '$(BuildAllConfigurations)' == 'true')">true</BuildingNETFxVertical> <BuildingUAPVertical Condition="'$(BuildingUAPVertical)' == '' AND ('$(_bc_TargetGroup)'=='uap' OR '$(BuildAllConfigurations)' == 'true')">true</BuildingUAPVertical> <BuildingUAPAOTVertical Condition="'$(BuildingUAPAOTVertical)' == '' AND ('$(_bc_TargetGroup)'=='uapaot' OR '$(BuildAllConfigurations)' == 'true')">true</BuildingUAPAOTVertical> </PropertyGroup> <!-- Set the kind of PDB to Portable and turn on SourceLink (fetching source from GitHub) --> <PropertyGroup> <DebugType Condition="'$(DebugType)' == ''">Portable</DebugType> <!-- Empty DebugType when building for netfx and in windows so that it is set to full or pdbonly later --> <DebugType Condition="'$(TargetsNetFx)' == 'true' AND '$(RunningOnUnix)' != 'true'"></DebugType> <UseSourceLink>true</UseSourceLink> </PropertyGroup> <!-- Set up Default symbol and optimization for Configuration --> <Choose> <When Condition="'$(ConfigurationGroup)'=='Debug'"> <PropertyGroup> <DebugSymbols Condition="'$(DebugSymbols)' == ''">true</DebugSymbols> <Optimize Condition="'$(Optimize)' == ''">false</Optimize> <DebugType Condition="'$(DebugType)' == ''">full</DebugType> <DefineConstants>$(DefineConstants),DEBUG,TRACE</DefineConstants> </PropertyGroup> </When> <When Condition="'$(ConfigurationGroup)' == 'Release'"> <PropertyGroup> <DebugSymbols Condition="'$(DebugSymbols)' == ''">true</DebugSymbols> <Optimize Condition="'$(Optimize)' == ''">true</Optimize> <DebugType Condition="'$(DebugType)' == ''">pdbonly</DebugType> <DefineConstants>$(DefineConstants),TRACE</DefineConstants> </PropertyGroup> </When> </Choose> <PropertyGroup> <IsRedistAssembly Condition="'$(IsRedistAssembly)'=='' AND ($(MSBuildProjectFullPath.Contains('\redist\')) OR $(MSBuildProjectFullPath.Contains('/redist/')))">true</IsRedistAssembly> </PropertyGroup> <PropertyGroup Condition="'$(IsRedistAssembly)'=='true'"> <NuGetRuntimeIdentifier Condition="'$(TargetGroup)' == 'netcore50'">win8</NuGetRuntimeIdentifier> <NuGetRuntimeIdentifier Condition="'$(TargetGroup)' == 'netcore50aot'">win8-aot</NuGetRuntimeIdentifier> <!-- workaround Dev14 issue with nuget targets, misspelling is intentional to align with Dev14 RTM targets --> <RuntimeIndentifier>$(NuGetRuntimeIdentifier)</RuntimeIndentifier> </PropertyGroup> <!-- If there is a target group, try to find project.json and lockfile in a subfolder named as that target. --> <PropertyGroup Condition="'$(TargetGroup)'!=''"> <ProjectJson Condition="Exists('$(MSBuildProjectDirectory)/$(TargetGroup)/project.json')">$(MSBuildProjectDirectory)/$(TargetGroup)/project.json</ProjectJson> <!-- Check for both project.json and lockfile to avoid using a stale lockfile. --> <ProjectLockJson Condition="Exists('$(MSBuildProjectDirectory)/$(TargetGroup)/project.json') AND Exists('$(MSBuildProjectDirectory)/$(TargetGroup)/project.lock.json')">$(MSBuildProjectDirectory)/$(TargetGroup)/project.lock.json</ProjectLockJson> </PropertyGroup> <!-- Disable some standard properties for building our projects --> <PropertyGroup> <NoStdLib>true</NoStdLib> <NoExplicitReferenceToStdLib>true</NoExplicitReferenceToStdLib> <AddAdditionalExplicitAssemblyReferences>false</AddAdditionalExplicitAssemblyReferences> <GenerateTargetFrameworkAttribute>false</GenerateTargetFrameworkAttribute> <CopyNuGetImplementations>false</CopyNuGetImplementations> </PropertyGroup> <!-- Language configuration --> <PropertyGroup> <LangVersion>latest</LangVersion> <!-- default to allowing all language features --> <WarningLevel>4</WarningLevel> <TreatWarningsAsErrors>true</TreatWarningsAsErrors> </PropertyGroup> <PropertyGroup Condition="'$(IsReferenceAssembly)' == 'true'"> <!-- disable warnings about unused fields --> <NoWarn>$(NoWarn);0169;0649</NoWarn> </PropertyGroup> <!-- Set up some common paths --> <PropertyGroup> <CommonPath>$(SourceDir)Common\src</CommonPath> <CommonTestPath>$(SourceDir)Common\tests</CommonTestPath> </PropertyGroup> <!-- Set up the default output and intermediate paths --> <PropertyGroup> <OSPlatformConfig>$(OSGroup).$(Platform).$(ConfigurationGroup)</OSPlatformConfig> <TargetOutputRelPath Condition="'$(TargetGroup)'!=''">$(TargetGroup)/</TargetOutputRelPath> <BaseOutputPath Condition="'$(BaseOutputPath)'==''">$(BinDir)</BaseOutputPath> <OutputPathSubfolder Condition="'$(IsCompatAssembly)'=='true'">/Compat</OutputPathSubfolder> <OutputPath Condition="'$(OutputPath)'==''">$(BaseOutputPath)$(OSPlatformConfig)/$(MSBuildProjectName)/$(TargetOutputRelPath)$(OutputPathSubfolder)</OutputPath> <IntermediateOutputRootPath Condition="'$(IntermediateOutputRootPath)' == ''">$(BaseIntermediateOutputPath)$(OSPlatformConfig)/</IntermediateOutputRootPath> <IntermediateOutputPath Condition="'$(IntermediateOutputPath)' == ''">$(IntermediateOutputRootPath)$(MSBuildProjectName)/$(TargetOutputRelPath)</IntermediateOutputPath> <RuntimePath Condition="'$(RuntimePath)' == ''">$(BinDir)runtime/$(BuildConfiguration)/</RuntimePath> <TestPath Condition="'$(TestPath)' == ''">$(TestWorkingDir)$(MSBuildProjectName)/$(BuildConfiguration)/</TestPath> <RefRootPath>$(BinDir)ref/</RefRootPath> <BuildConfigurationRefPath>$(RefRootPath)$(_bc_TargetGroup)/</BuildConfigurationRefPath> <BuildConfigurationRefPath Condition="$(_bc_TargetGroup.EndsWith('aot'))">$(RefRootPath)$(_bc_TargetGroup.TrimEnd('t').TrimEnd('o').TrimEnd('a'))/</BuildConfigurationRefPath> <RefPath>$(RefRootPath)$(TargetGroup)/</RefPath> <RefPath Condition="$(TargetGroup.EndsWith('aot'))">$(RefRootPath)$(TargetGroup.TrimEnd('t').TrimEnd('o').TrimEnd('a'))/</RefPath> <NetStandardRefPath>$(RefRootPath)netstandard/</NetStandardRefPath> <NetFxRefPath>$(RefRootPath)netfx/</NetFxRefPath> <!-- project file to use when resolving ReferenceFromRuntime items --> <RuntimeProjectFile Condition="'$(RuntimeProjectFile)' == ''">$(ProjectDir)\external\runtime\runtime.depproj</RuntimeProjectFile> <!-- Paths to binplace package content --> <NETCoreAppPackageRefPath>$(BinDir)pkg\netcoreapp\ref</NETCoreAppPackageRefPath> <NETCoreAppPackageRuntimePath>$(BinDir)pkg\netcoreapp\lib</NETCoreAppPackageRuntimePath> <UAPPackageRefPath>$(BinDir)pkg\uap\ref</UAPPackageRefPath> <UAPPackageRuntimePath>$(BinDir)pkg\uap\lib</UAPPackageRuntimePath> <UAPAOTPackageRuntimePath>$(BinDir)pkg\uapaot\lib</UAPAOTPackageRuntimePath> <NetFxPackageRefPath>$(BinDir)pkg\netfx\ref</NetFxPackageRefPath> <NetFxPackageRuntimePath>$(BinDir)pkg\netfx\lib</NetFxPackageRuntimePath> <!-- We add extra binplacing for the test shared framework until we can get hardlinking with the runtime directory working on all platforms --> <BinPlaceTestSharedFramework Condition="'$(_bc_TargetGroup)' == 'netcoreapp' AND '$(BuildTests)'!='false'">true</BinPlaceTestSharedFramework> <BinPlaceILCInputFolder Condition="'$(_bc_TargetGroup)' == 'uapaot' And '$(BinPlaceILCInputFolder)' == ''">true</BinPlaceILCInputFolder> <BinPlaceUAPFramework Condition="'$(_bc_TargetGroup)' == 'uap'">true</BinPlaceUAPFramework> <BinPlaceNETFXRuntime Condition="'$(_bc_TargetGroup)' == 'netfx'">true</BinPlaceNETFXRuntime> <NETCoreAppTestSharedFxVersion>9.9.9</NETCoreAppTestSharedFxVersion> <TestHostRootPath>$(BinDir)testhost/$(BuildConfiguration)/</TestHostRootPath> <NETCoreAppTestHostFxrPath>$(TestHostRootPath)host/fxr/$(NETCoreAppTestSharedFxVersion)/</NETCoreAppTestHostFxrPath> <NETCoreAppTestSharedFrameworkPath>$(TestHostRootPath)shared/Microsoft.NETCore.App/$(NETCoreAppTestSharedFxVersion)/</NETCoreAppTestSharedFrameworkPath> <ILCFXInputFolder>$(TestHostRootPath)ILCInputFolder</ILCFXInputFolder> <!-- For UAP, we'll produce the layout and hard-link this into each test's directory --> <UAPTestSharedFrameworkPath>$(TestHostRootPath)UAPLayout</UAPTestSharedFrameworkPath> <!-- Constructed shared fx path for testing --> <UseDotNetNativeToolchain Condition="'$(BuildingUAPAOTVertical)' == 'true'">true</UseDotNetNativeToolchain> <!-- System.Private.* comes from test ilc, so the symbol packages for those versions will no exist, this is to avoid warnings --> <DownloadCoreCLRSymbols Condition="'$(BuildingUAPAOTVertical)' == 'true'">false</DownloadCoreCLRSymbols> <PackagesBasePath Condition="'$(PackagesBasePath)'==''">$(BinDir)$(OSPlatformConfig)</PackagesBasePath> <PackageOutputPath Condition="'$(PackageOutputPath)'==''">$(PackageOutputRoot)$(ConfigurationGroup)/</PackageOutputPath> <SymbolPackageOutputPath Condition="'$(SymbolPackageOutputPath)'==''">$(PackageOutputPath)symbols/</SymbolPackageOutputPath> </PropertyGroup> <!-- Properties related to multi-file mode for ILC tests --> <PropertyGroup Condition="'$(TargetGroup)' == 'uapaot'"> <!-- Only enable multi-file for Release-x64 and Debug-x86 for now --> <!-- Temporarily disabling multifile test configurations. For more info, please check: https://github.com/dotnet/corefx/issues/22826 <EnableMultiFileILCTests Condition="'$(ConfigurationGroup)|$(ArchGroup)' == 'Release|x64' Or '$(ConfigurationGroup)|$(ArchGroup)' == 'Debug|x86' Or '$(ConfigurationGroup)|$(ArchGroup)' == 'Release|arm'">true</EnableMultiFileILCTests> --> </PropertyGroup> <PropertyGroup> <OptionalToolingJsonPath>$(ProjectDir)\external\test-runtime\optional.json</OptionalToolingJsonPath> </PropertyGroup> <PropertyGroup> <!-- Don't run tests if we're building another platform's binaries on Windows --> <SkipTests Condition="'$(SkipTests)'=='' and ('$(OsEnvironment)'=='Windows_NT' and '$(TargetsWindows)'!='true' and '$(OSGroup)'!='AnyOS')">true</SkipTests> </PropertyGroup> <!-- Use Roslyn Compilers to build --> <Import Project="$(RoslynPropsFile)" Condition="'$(RunningOnUnix)'!='true' and Exists('$(RoslynPropsFile)') and '$(UseRoslynCompilers)'!='false' and '$(RoslynIncompatibleMsbuildVersion)' != 'true'" /> <Import Project="$(RoslynPropsFile)" Condition="'$(RunningOnUnix)'=='true' and Exists('$(RoslynPropsFile)') and '$(RoslynIncompatibleMsbuildVersion)' != 'true'" /> </Project>