Welcome to mirror list, hosted at ThFree Co, Russian Federation.

generators.targets « eng - github.com/dotnet/runtime.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: ac01adc5cc4c4ac88fe11b3e4443d4a3cc413e19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<Project>
  <PropertyGroup>
    <EnableLibraryImportGenerator Condition="'$(EnableLibraryImportGenerator)' == '' and
                                             '$(MSBuildProjectName)' == 'System.Private.CoreLib'">true</EnableLibraryImportGenerator>
  </PropertyGroup>

  <ItemGroup>
    <EnabledGenerators Include="LibraryImportGenerator" Condition="'$(EnableLibraryImportGenerator)' == 'true'" />
    <!-- If the current project is not System.Private.CoreLib, we enable the LibraryImportGenerator source generator
         when the project is a C# source project that:
         - doesn't target the latest TFM or
         - references everything from the targeting pack (OOB) or
         - references System.Private.CoreLib, or
         - references System.Runtime.InteropServices -->
    <EnabledGenerators Include="LibraryImportGenerator"
                       Condition="'$(EnableLibraryImportGenerator)' == '' and
                                  '$(IsSourceProject)' == 'true' and
                                  '$(MSBuildProjectExtension)' == '.csproj' and
                                  (
                                    '$(TargetFrameworkMoniker)' != '$(NetCoreAppCurrentTargetFrameworkMoniker)' or
                                    '$(DisableImplicitFrameworkReferences)' != 'true' or
                                    (
                                      '@(Reference)' != '' and
                                      @(Reference->AnyHaveMetadataValue('Identity', 'System.Runtime.InteropServices'))
                                    ) or
                                    (
                                      '@(ProjectReference)' != '' and
                                      @(ProjectReference->AnyHaveMetadataValue('Identity', '$(CoreLibProject)'))
                                    )
                                  )" />
  </ItemGroup>

  <ItemGroup Condition="'@(EnabledGenerators)' != '' and
                        @(EnabledGenerators->AnyHaveMetadataValue('Identity', 'LibraryImportGenerator')) and
                        !$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net7.0'))">
    <Compile Include="$(CoreLibSharedDir)System\Runtime\InteropServices\LibraryImportAttribute.cs" />
    <Compile Include="$(CoreLibSharedDir)System\Runtime\InteropServices\StringMarshalling.cs" />
  </ItemGroup>

  <!-- Use this complex item list based filtering to add the ProjectReference to make sure dotnet/runtime stays compatible with NuGet Static Graph Restore.
       That is required as the EnabledGenerators condition checks on the Reference and ProjectReference items and hence can't be a property condition. -->
  <ItemGroup Condition="'@(EnabledGenerators)' != '' and
                        @(EnabledGenerators->AnyHaveMetadataValue('Identity', 'LibraryImportGenerator'))">
    <AnalyzerReference Include="$(LibrariesProjectRoot)System.Runtime.InteropServices\gen\LibraryImportGenerator\LibraryImportGenerator.csproj;
                                $(LibrariesProjectRoot)System.Runtime.InteropServices\gen\Microsoft.Interop.SourceGeneration\Microsoft.Interop.SourceGeneration.csproj" />
  </ItemGroup>

  <!-- AnalyzerReference items are transformed to ProjectReferences with the required analyzer metadata. -->
  <ItemGroup>
    <ProjectReference Include="@(AnalyzerReference)"
                      ReferenceOutputAssembly="false"
                      OutputItemType="Analyzer"
                      Pack="false" />
    <ProjectReference Update="@(AnalyzerReference->WithMetadataValue('ReferenceAnalyzer', 'false'))"
                      OutputItemType="" />
  </ItemGroup>

  <Target Name="ConfigureGenerators"
          DependsOnTargets="ConfigureLibraryImportGenerator"
          BeforeTargets="CoreCompile" />

  <!-- Microsoft.Interop.LibraryImportGenerator -->
  <Target Name="ConfigureLibraryImportGenerator"
          Condition="'@(EnabledGenerators)' != '' and @(EnabledGenerators->AnyHaveMetadataValue('Identity', 'LibraryImportGenerator'))"
          DependsOnTargets="ResolveProjectReferences"
          BeforeTargets="GenerateMSBuildEditorConfigFileShouldRun">
    <PropertyGroup>
        <LibraryImportGenerator_UseMarshalType>true</LibraryImportGenerator_UseMarshalType>
    </PropertyGroup>

    <ItemGroup Condition="'$(NetCoreAppCurrentTargetFrameworkMoniker)' == '$(TargetFrameworkMoniker)' and '$(IncludeLibraryImportGeneratorSources)' != 'false'">
    </ItemGroup>
  </Target>

  <Import Project="$(LibrariesProjectRoot)System.Runtime.InteropServices\gen\LibraryImportGenerator\Microsoft.Interop.LibraryImportGenerator.props" />
</Project>