Skip to content
代码片段 群组 项目
Directory.Build.targets 12.1 KB
更新 更旧
  • 了解如何忽略特定修订
  • <Project>
    
        <!-- Only build Microsoft.AspNetCore.App, Microsoft.AspNetCore.App.Ref, ref/ assemblies, and ProjectTemplates in source build. -->
    
        <!-- Analyzer package are needed in source build for WebSDK -->
    
        <ExcludeFromSourceBuild
    
            Condition="'$(ExcludeFromSourceBuild)' == '' and 
                '$(DotNetBuildFromSource)' == 'true' and 
                '$(IsAspNetCoreApp)' != 'true' and 
                '$(MSBuildProjectName)' != '$(TargetingPackName)' and 
                '$(IsAnalyzersProject)' != 'true' and 
                '$(IsProjectTemplateProject)' != 'true'">true</ExcludeFromSourceBuild>
    
    Matt Mitchell's avatar
    Matt Mitchell 已提交
        <!-- If the user has specified that they want to skip building any test related projects with SkipTestBuild,
         suppress all targets for TestProjects using ExcludeFromBuild. -->
    
        <ExcludeFromBuild Condition="'$(IsPackable)' != 'true' and
            '$(SkipTestBuild)' == 'true' and
    
    Doug Bunting's avatar
    Doug Bunting 已提交
            ($(IsTestProject) or
    
    Matt Mitchell's avatar
    Matt Mitchell 已提交
             '$(IsTestAssetProject)' == 'true' or
    
             '$(IsBenchmarkProject)' == 'true' or
    
    Matt Mitchell's avatar
    Matt Mitchell 已提交
             '$(IsSampleProject)' == 'true' or
    
             '$(IsSpecificationTestProject)' == 'true' or
             '$(IsMicrobenchmarksProject)' == 'true')">true</ExcludeFromBuild>
    
      <PropertyGroup>
        <!-- Ignore API doc requirements for test assets -->
    
        <NoWarn Condition="'$(IsTestAssetProject)' == 'true' or '$(IsSampleProject)' == 'true' or '$(IsBenchmarkProject)' == 'true' or
          '$(IsMicrobenchmarksProject)' == 'true'">$(NoWarn);CS1591</NoWarn>
    
      </PropertyGroup>
    
    
      <PropertyGroup Label="Resx settings">
    
        <GenerateResxSource Condition="'$(GenerateResxSource)' == ''">true</GenerateResxSource>
        <GenerateResxSourceEmitFormatMethods Condition="'$(GenerateResxSourceEmitFormatMethods)' == ''">true</GenerateResxSourceEmitFormatMethods>
    
      </PropertyGroup>
    
    
      <Import Project="Sdk.targets" Sdk="Microsoft.DotNet.Arcade.Sdk" />
      <!-- Properties which should be set after the project has been evaluated -->
    
      <PropertyGroup Label="Versioning settings">
        <!-- The 'human friendly' version to display in installers. In pre-release builds, this might be "2.0.7 Preview 2 Build 12356". In final builds, it should be "2.0.7" -->
    
        <BrandingVersionSuffix>$(PreReleaseBrandingLabel) Build $(VersionSuffix)</BrandingVersionSuffix>
    
        <PackageBrandingVersion>$(VersionPrefix)</PackageBrandingVersion>
        <PackageBrandingVersion Condition=" '$(VersionSuffix)' != '' ">$(PackageBrandingVersion) $(BrandingVersionSuffix.Trim())</PackageBrandingVersion>
    
    
        <SiteExtensionVersion>$(VersionPrefix)</SiteExtensionVersion>
        <SiteExtensionVersion Condition=" '$(VersionSuffix)' != '' ">$(VersionPrefix)-$(VersionSuffix.Replace('.','-'))</SiteExtensionVersion>
    
        <PackageVersion Condition=" '$(PackageVersion)' == '' ">$(Version)</PackageVersion>
    
        <SharedFxVersion>$(PackageVersion)</SharedFxVersion>
    
        <SharedFxVersion Condition=" '$(StabilizePackageVersion)' == 'true' ">$(VersionPrefix)</SharedFxVersion>
        <SharedFxProductName>$(Product) $(SharedFxVersion) Shared Framework</SharedFxProductName>
    
        <TargetingPackVersion>$(SharedFxVersion)</TargetingPackVersion>
    
        <PackageVersion Condition=" '$(NoSemVer20)' == 'true' ">$(SiteExtensionVersion)</PackageVersion>
    
        <!-- Analyzers package are special. In general, they should not have dependencies in the nuspec. Analyzer assemblies are not meant to be used for compilation or runtime. -->
        <SuppressDependenciesWhenPacking Condition="'$(SuppressDependenciesWhenPacking)' == '' AND '$(IsAnalyzersProject)' == 'true'">true</SuppressDependenciesWhenPacking>
    
      <PropertyGroup Condition=" '$(MSBuildProjectExtension)' == '.csproj' ">
        <PackageId Condition=" '$(PackageId)' == '' ">$(AssemblyName)</PackageId>
    
        <IsPackable
    
    Doug Bunting's avatar
    Doug Bunting 已提交
            Condition="'$(IsPackable)' == '' AND ( $(IsTestProject) OR '$(IsTestAssetProject)' == 'true' OR
    
             '$(IsBenchmarkProject)' == 'true' OR '$(IsSampleProject)' == 'true' OR '$(IsMicrobenchmarksProject)' == 'true') ">false</IsPackable>
    
      <Import Project="eng\Baseline.Designer.props" />
    
    
      <PropertyGroup Condition=" '$(IsPackable)' != 'false' AND '$(IsServicingBuild)' == 'true' ">
    
        <IsPackageInThisPatch Condition="'$(IsPackageInThisPatch)' == ''">true</IsPackageInThisPatch>
    
        <!-- Used to distinguish between packages building -->
        <IsPackableInNonServicingBuild>true</IsPackableInNonServicingBuild>
    
        <!-- Suppress creation of .nupkg for servicing builds of non-shipping projects. -->
    
        <IsPackable Condition=" '$(IsPackageInThisPatch)' != 'true' ">false</IsPackable>
      </PropertyGroup>
    
    
      <PropertyGroup>
        <!-- When OnlyPackPlatformSpecificPackages is set, only produce packages for projects which set RuntimeIdentifier. -->
        <!-- Keep this below where we set "IsPackageInThisPatch" -->
    
    John Luo's avatar
    John Luo 已提交
        <IsPackable Condition=" '$(OnlyPackPlatformSpecificPackages)' == 'true' AND '$(RuntimeIdentifier)' == '' ">false</IsPackable>
    
      <PropertyGroup>
        <PackageVersionForPackageVersionInfo>$(PackageVersion)</PackageVersionForPackageVersionInfo>
      </PropertyGroup>
    
    
      <PropertyGroup Condition=" '$(IsPackageInThisPatch)' != 'true' AND '$(BaselinePackageVersion)' != '' AND '$(IsServicingBuild)' == 'true' ">
    
        <!-- This keeps assembly and package versions consistent across patches. If a package is not included in a patch, its version should stay at the baseline. -->
    
        <AssemblyVersion Condition="$(BaselinePackageVersion.Contains('-'))">$(BaselinePackageVersion.Substring(0, $(BaselinePackageVersion.IndexOf('-')))).0</AssemblyVersion>
        <AssemblyVersion Condition="! $(BaselinePackageVersion.Contains('-'))">$(BaselinePackageVersion).0</AssemblyVersion>
    
        <!--
          Ideally, we would also set the project version to match the baseline in case NuGet turns a ProjectReference into a nuspec depenendency, but
          NuGet does not currently handle conflicts between packages and projects which have the same package id/version.
          See https://github.com/NuGet/Home/issues/6795.
    
          Because we still use static analysis to scrape versions, only set this during static analysis, which can be detected by checking for both NoBuild and DesignTimeBuild.
        -->
        <Version Condition="'$(NoBuild)' == 'true' AND '$(DesignTimeBuild)' == 'true'">$(BaselinePackageVersion)</Version>
        <PackageVersion Condition="'$(NoBuild)' == 'true' AND '$(DesignTimeBuild)' == 'true'">$(BaselinePackageVersion)</PackageVersion>
    
        <!-- For servicing builds, we want to resolve baseline versions of project packages that aren't building, always -->
    
        <PackageVersionForPackageVersionInfo>$(BaselinePackageVersion)</PackageVersionForPackageVersionInfo>
    
      <PropertyGroup>
    
        <!-- Implementation projects are the projects which produce nuget packages or shipping assemblies. -->
    
        <IsImplementationProject Condition=" '$(IsImplementationProject)' == '' AND
            '$(IsAnalyzersProject)' != 'true' AND
            '$(IsBenchmarkProject)' != 'true' AND
            '$(IsSampleProject)' != 'true' AND
            '$(IsSpecificationTestProject)' != 'true' AND
            '$(IsTestAssetProject)' != 'true' AND
    
    Doug Bunting's avatar
    Doug Bunting 已提交
            !$(IsTestProject) AND
    
            '$(IsMicrobenchmarksProject)' != 'true' ">true</IsImplementationProject>
    
        <!-- This determines whether a project is available as a <Reference> to other projects in this repo. -->
    
        <IsProjectReferenceProvider Condition=" '$(IsProjectReferenceProvider)' == '' AND
            ( '$(IsImplementationProject)' == 'true' OR '$(IsSpecificationTestProject)' == 'true' ) ">true</IsProjectReferenceProvider>
    
        <HasReferenceAssembly
    
            Condition=" '$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' AND '$(IsAspNetCoreApp)' == 'true' ">true</HasReferenceAssembly>
    
        <HasReferenceAssembly Condition="'$(HasReferenceAssembly)' == ''">false</HasReferenceAssembly>
    
        <ProduceReferenceAssembly>$(HasReferenceAssembly)</ProduceReferenceAssembly>
    
        <!-- Duplicate setting from Microsoft.Common.CurrentVersion.targets because this is imported after that file. -->
        <TargetRefPath
            Condition=" '$(TargetRefPath)' == '' and $(ProduceReferenceAssembly) ">$([MSBuild]::NormalizePath($(TargetDir), 'ref', $(TargetFileName)))</TargetRefPath>
    
        <IsPackable Condition="'$(IsPackable)' == '' AND ('$(IsImplementationProject)' == 'true' OR '$(IsAnalyzersProject)' == 'true') ">true</IsPackable>
    
        <IsPackable Condition="'$(IsPackable)' == '' ">false</IsPackable>
    
    
    Doug Bunting's avatar
    Doug Bunting 已提交
        <BuildHelixPayload Condition="'$(BuildHelixPayload)' == '' AND $(IsTestProject) ">true</BuildHelixPayload>
    
        <SkipTests Condition="'$(SkipHelixReadyTests)' == 'true' AND '$(BuildHelixPayload)' == 'true'">true</SkipTests>
    
      </PropertyGroup>
    
      <PropertyGroup>
        <PackageThirdPartyNoticesFile Condition="'$(PackageThirdPartyNoticesFile)' == ''">$(RepoRoot)THIRD-PARTY-NOTICES.TXT</PackageThirdPartyNoticesFile>
      </PropertyGroup>
    
      <ItemGroup Condition="'$(IsPackable)' == 'true'">
        <None Include="$(PackageThirdPartyNoticesFile)" Pack="true" PackagePath="." />
      </ItemGroup>
    
    
      <!--
        If assembly is in shared framework and not net4*, assembly version should remain fixed for an entire
        major.minor release even in servicing.
      -->
      <PropertyGroup Condition=" '$(IsAspNetCoreApp)' == 'true' AND
          '$(Language)' == 'C#' AND
          '$(TargetFrameworkIdentifier)' != '.NETFramework' ">
        <AssemblyVersion>$(AspNetCoreMajorMinorVersion).0.0</AssemblyVersion>
    
        <!-- Do not update the Microsoft.AspNetCore.App KnownFrameworkReference item unless requested. -->
        <UpdateAspNetCoreKnownFramework>false</UpdateAspNetCoreKnownFramework>
        <UpdateAspNetCoreKnownFramework Condition=" '$(UseAspNetCoreSharedRuntime)' == 'true' AND
          '$(DoNotApplyWorkaroundsToMicrosoftAspNetCoreApp)' != 'true' ">true</UpdateAspNetCoreKnownFramework>
    
    Justin Kotalik's avatar
    Justin Kotalik 已提交
        <KnownFrameworkReference Condition="'$(UseAspNetCoreSharedRuntime)' != 'true'" Remove="Microsoft.AspNetCore.App" />
        <KnownFrameworkReference Remove="Microsoft.WindowsDesktop.App" />
    
      <PropertyGroup Condition=" '$(CopySymbolsToArtifacts)' == 'true' AND '$(TargetFramework)' != '' ">
        <BuildDependsOn>$(BuildDependsOn);_CopySymbolsToArtifacts</BuildDependsOn>
      </PropertyGroup>
    
    
      <!-- Properties for Package Validation -->
      <PropertyGroup Condition="'$(ExcludeFromSourceBuild)' != 'true'">
        <EnablePackageValidation>true</EnablePackageValidation>
        <DisablePackageBaselineValidation Condition="'$(IsServicingBuild)' != 'true'">true</DisablePackageBaselineValidation>
        <GenerateCompatibilitySuppressionFile>true</GenerateCompatibilitySuppressionFile>
      </PropertyGroup>
    
    
      <Target Name="_CopySymbolsToArtifacts">
        <Copy SourceFiles="$([System.IO.Path]::ChangeExtension('$(TargetPath)', 'pdb'))"
            DestinationFolder="$(SymbolsOutputPath)$(TargetFramework)"
            OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
            Retries="$(CopyRetryCount)"
            RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
            SkipUnchangedFiles="$(SkipCopyUnchangedFiles)" />
      </Target>
    
    
      <Import Project="eng\Workarounds.targets" />
    
      <Import Project="artifacts\bin\GenerateFiles\Directory.Build.targets" Condition=" '$(MSBuildProjectName)' != 'GenerateFiles' " />
    
      <Import Project="eng\targets\ResolveIisReferences.targets" Condition=" '$(MSBuildProjectExtension)' != '.vcxproj' " />
    
      <Import Project="eng\targets\Cpp.Common.targets"  Condition="'$(MSBuildProjectExtension)' == '.vcxproj'" />
    
      <Import Project="eng\targets\CSharp.Common.targets"  Condition="'$(MSBuildProjectExtension)' == '.csproj'" />
    
      <Import Project="eng\targets\FSharp.Common.targets"  Condition="'$(MSBuildProjectExtension)' == '.fsproj'" />
    
      <Import Project="eng\targets\Wix.Common.targets"  Condition="'$(MSBuildProjectExtension)' == '.wixproj'" />
    
      <Import Project="eng\targets\Npm.Common.targets"  Condition="'$(MSBuildProjectExtension)' == '.npmproj'" />
    
      <Import Project="eng\targets\Java.Common.targets"  Condition="'$(MSBuildProjectExtension)' == '.javaproj'" />
    
    Doug Bunting's avatar
    Doug Bunting 已提交
      <Import Project="eng\targets\Helix.targets" Condition=" $(IsTestProject) " />
    
      <Import Project="eng\targets\FunctionalTestWithAssets.targets"
          Condition=" $(IsTestProject) AND $(ContainsFunctionalTestAssets) " />
    
    </Project>