You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							147 lines
						
					
					
						
							6.7 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							147 lines
						
					
					
						
							6.7 KiB
						
					
					
				
								<?xml version="1.0" encoding="utf-8"?>
							 | 
						|
								<!-- Copyright (c)  Microsoft.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information. -->
							 | 
						|
								<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
							 | 
						|
								  <!--
							 | 
						|
								    Common targets for managed compilers.
							 | 
						|
								  -->
							 | 
						|
								  <UsingTask TaskName="Microsoft.CodeAnalysis.BuildTasks.MapSourceRoots" AssemblyFile="$(MSBuildThisFileDirectory)Microsoft.Build.Tasks.CodeAnalysis.dll" />
							 | 
						|
								
							 | 
						|
								  <Target Name="ShimReferencePathsWhenCommonTargetsDoesNotUnderstandReferenceAssemblies"
							 | 
						|
								          BeforeTargets="CoreCompile"
							 | 
						|
								          Condition="'@(ReferencePathWithRefAssemblies)' == ''">
							 | 
						|
								    <!-- Common targets should populate this item from dev15.3, but this file
							 | 
						|
								         may be used (via NuGet package) on earlier MSBuilds. If the
							 | 
						|
								         adjusted-for-reference-assemblies item is not populated, just use
							 | 
						|
								         the older item's contents. -->
							 | 
						|
								    <ItemGroup>
							 | 
						|
								      <ReferencePathWithRefAssemblies Include="@(ReferencePath)" />
							 | 
						|
								    </ItemGroup>
							 | 
						|
								  </Target>
							 | 
						|
								
							 | 
						|
								  <Target Name="_BeforeVBCSCoreCompile">
							 | 
						|
								    <ItemGroup Condition="'$(TargetingClr2Framework)' == 'true'">
							 | 
						|
								      <ReferencePathWithRefAssemblies>
							 | 
						|
								        <EmbedInteropTypes />
							 | 
						|
								      </ReferencePathWithRefAssemblies>
							 | 
						|
								    </ItemGroup>
							 | 
						|
								
							 | 
						|
								    <!-- Prefer32Bit was introduced in .NET 4.5. Set it to false if we are targeting 4.0 -->
							 | 
						|
								    <PropertyGroup Condition="('$(TargetFrameworkVersion)' == 'v4.0')">
							 | 
						|
								      <Prefer32Bit>false</Prefer32Bit>
							 | 
						|
								    </PropertyGroup>
							 | 
						|
								
							 | 
						|
								    <!-- TODO: Remove this ItemGroup once it has been moved to "_GenerateCompileInputs" target in Microsoft.Common.CurrentVersion.targets.
							 | 
						|
								         https://github.com/dotnet/roslyn/issues/12223 -->
							 | 
						|
								    <ItemGroup Condition="('$(AdditionalFileItemNames)' != '')">
							 | 
						|
								      <AdditionalFileItems Include="$(AdditionalFileItemNames)" />
							 | 
						|
								      <AdditionalFiles Include="@(%(AdditionalFileItems.Identity))" />
							 | 
						|
								    </ItemGroup>
							 | 
						|
								
							 | 
						|
								    <PropertyGroup Condition="'$(UseSharedCompilation)' == ''">
							 | 
						|
								      <UseSharedCompilation>true</UseSharedCompilation>
							 | 
						|
								    </PropertyGroup>
							 | 
						|
								  </Target>
							 | 
						|
								
							 | 
						|
								  <!--
							 | 
						|
								    ========================
							 | 
						|
								    DeterministicSourcePaths
							 | 
						|
								    ========================
							 | 
						|
								    
							 | 
						|
								    Unless specified otherwise enable deterministic source root (PathMap) when building deterministically on CI server, but not for local builds.
							 | 
						|
								    In order for the debugger to find source files when debugging a locally built binary the PDB must contain original, unmapped local paths.
							 | 
						|
								  -->
							 | 
						|
								  <PropertyGroup>
							 | 
						|
								    <DeterministicSourcePaths Condition="'$(DeterministicSourcePaths)' == '' and '$(Deterministic)' == 'true' and '$(ContinuousIntegrationBuild)' == 'true'">true</DeterministicSourcePaths>
							 | 
						|
								  </PropertyGroup>
							 | 
						|
								
							 | 
						|
								  <!--
							 | 
						|
								    ==========
							 | 
						|
								    SourceRoot
							 | 
						|
								    ==========
							 | 
						|
								
							 | 
						|
								    All source files of the project are expected to be located under one of the directories specified by SourceRoot item group.
							 | 
						|
								    This target collects all SourceRoots from various sources.
							 | 
						|
								
							 | 
						|
								    This target calculates final local path for each SourceRoot and sets SourceRoot.MappedPath metadata accordingly.
							 | 
						|
								    The final path is a path with deterministic prefix when DeterministicSourcePaths is true, and the original path otherwise.
							 | 
						|
								    In addition, the target validates and deduplicates the SourceRoot items.
							 | 
						|
								
							 | 
						|
								    InitializeSourceControlInformation is an msbuild target that ensures the SourceRoot items are populated from source control.
							 | 
						|
								    The target is available only if SourceControlInformationFeatureSupported is true.
							 | 
						|
								
							 | 
						|
								    A consumer of SourceRoot.MappedPath metadata, such as Source Link generator, shall depend on this target. 
							 | 
						|
								  -->
							 | 
						|
								
							 | 
						|
								  <Target Name="InitializeSourceRootMappedPaths"
							 | 
						|
								          DependsOnTargets="_InitializeSourceRootMappedPathsFromSourceControl">
							 | 
						|
								
							 | 
						|
								    <ItemGroup Condition="'@(_MappedSourceRoot)' != ''">
							 | 
						|
								      <_MappedSourceRoot Remove="@(_MappedSourceRoot)" />
							 | 
						|
								    </ItemGroup>
							 | 
						|
								
							 | 
						|
								    <Microsoft.CodeAnalysis.BuildTasks.MapSourceRoots SourceRoots="@(SourceRoot)" Deterministic="$(DeterministicSourcePaths)">
							 | 
						|
								      <Output TaskParameter="MappedSourceRoots" ItemName="_MappedSourceRoot" />
							 | 
						|
								    </Microsoft.CodeAnalysis.BuildTasks.MapSourceRoots>
							 | 
						|
								
							 | 
						|
								    <ItemGroup>
							 | 
						|
								      <SourceRoot Remove="@(SourceRoot)" />
							 | 
						|
								      <SourceRoot Include="@(_MappedSourceRoot)" />
							 | 
						|
								    </ItemGroup>
							 | 
						|
								  </Target>
							 | 
						|
								
							 | 
						|
								  <!-- 
							 | 
						|
								    Declare that target InitializeSourceRootMappedPaths that populates MappedPaths metadata on SourceRoot items is available.
							 | 
						|
								  -->
							 | 
						|
								  <PropertyGroup>
							 | 
						|
								    <SourceRootMappedPathsFeatureSupported>true</SourceRootMappedPathsFeatureSupported>
							 | 
						|
								  </PropertyGroup>
							 | 
						|
								
							 | 
						|
								  <!-- 
							 | 
						|
								    If InitializeSourceControlInformation target isn't supported, we just continue without invoking that synchronization target. 
							 | 
						|
								    We'll proceed with SourceRoot (and other source control properties) provided by the user (or blank).
							 | 
						|
								  -->
							 | 
						|
								  <Target Name="_InitializeSourceRootMappedPathsFromSourceControl"
							 | 
						|
								          DependsOnTargets="InitializeSourceControlInformation"
							 | 
						|
								          Condition="'$(SourceControlInformationFeatureSupported)' == 'true'" />
							 | 
						|
								
							 | 
						|
								  <!-- 
							 | 
						|
								    =======
							 | 
						|
								    PathMap
							 | 
						|
								    =======
							 | 
						|
								
							 | 
						|
								    If DeterministicSourcePaths is true sets PathMap based on SourceRoot.MappedPaths.
							 | 
						|
								
							 | 
						|
								    This target requires SourceRoot to be initialized in order to calculate the PathMap.
							 | 
						|
								    If SourceRoot doesn't contain any top-level roots an error is reported.
							 | 
						|
								  -->
							 | 
						|
								
							 | 
						|
								  <Target Name="_SetPathMapFromSourceRoots"
							 | 
						|
								          DependsOnTargets="InitializeSourceRootMappedPaths"
							 | 
						|
								          BeforeTargets="CoreCompile"
							 | 
						|
								          Condition="'$(DeterministicSourcePaths)' == 'true'">
							 | 
						|
								
							 | 
						|
								    <ItemGroup>
							 | 
						|
								      <_TopLevelSourceRoot Include="@(SourceRoot)" Condition="'%(SourceRoot.NestedRoot)' == ''"/>
							 | 
						|
								    </ItemGroup>
							 | 
						|
								
							 | 
						|
								    <PropertyGroup Condition="'@(_TopLevelSourceRoot)' != ''">
							 | 
						|
								      <!-- TODO: Report error/warning if /pathmap doesn't cover all emitted source paths: https://github.com/dotnet/roslyn/issues/23969 -->
							 | 
						|
								
							 | 
						|
								      <!-- TODO: PathMap should accept and ignore empty mapping: https://github.com/dotnet/roslyn/issues/23523 -->
							 | 
						|
								      <PathMap Condition="'$(PathMap)' != ''">,$(PathMap)</PathMap>
							 | 
						|
								
							 | 
						|
								      <!--
							 | 
						|
								        Prepend the SourceRoot.MappedPath values to PathMap, if it already has a value.
							 | 
						|
								        For each emitted source path the compiler applies the first mapping that matches the path.
							 | 
						|
								        PathMap values set previously will thus only be applied if the mapping provided by 
							 | 
						|
								        SourceRoot.MappedPath doesn't match. Since SourceRoot.MappedPath is also used by SourceLink 
							 | 
						|
								        preferring it over manually set PathMap ensures that PathMap is consistent with SourceLink.
							 | 
						|
								      
							 | 
						|
								        TODO: quote the paths to avoid misinterpreting ',' and '=' in them as separators, 
							 | 
						|
								        but quoting doesn't currently work (see https://github.com/dotnet/roslyn/issues/22835).
							 | 
						|
								      -->
							 | 
						|
								      <PathMap>@(_TopLevelSourceRoot->'%(Identity)=%(MappedPath)', ',')$(PathMap)</PathMap>
							 | 
						|
								    </PropertyGroup>
							 | 
						|
								  </Target>
							 | 
						|
								
							 | 
						|
								</Project>
							 |