-
Notifications
You must be signed in to change notification settings - Fork 9.9k
/
Microsoft.Extensions.ApiDescription.Client.targets
179 lines (149 loc) · 7.71 KB
/
Microsoft.Extensions.ApiDescription.Client.targets
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project>
<!-- Internal settings. Not intended for customization. -->
<PropertyGroup>
<GenerateOpenApiCodeDependsOn>
_GenerateErrorsForOldItems;
_CreateOpenApiReferenceItemsForOpenApiProjectReferences;
_GetMetadataForOpenApiReferences;
_GenerateOpenApiCode;
_CreateCompileItemsForOpenApiReferences
</GenerateOpenApiCodeDependsOn>
</PropertyGroup>
<ItemGroup>
<PropertyPageSchema Include="$(MSBuildThisFileDirectory)OpenApiItemsSchema.xaml">
<Context>File;BrowseObject</Context>
</PropertyPageSchema>
</ItemGroup>
<!-- OpenApiProjectReference support. -->
<ItemGroup Condition=" '$(OpenApiBuildReferencedProjects)' == 'true' ">
<!--
Do not change %(ReferenceOutputAssembly) if project contains duplicate @(ProjectReference) and
@(OpenApiProjectReference) items.
-->
<ProjectReference Include="@(OpenApiProjectReference)" Exclude="@(ProjectReference)">
<Private>false</Private>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
<SkipGetTargetFrameworkProperties>true</SkipGetTargetFrameworkProperties>
</ProjectReference>
<ProjectReference Update="@(OpenApiProjectReference)">
<OpenApiReference>true</OpenApiReference>
</ProjectReference>
</ItemGroup>
<Target Name="_CreateOpenApiReferenceItemsForOpenApiProjectReferences" DependsOnTargets="ResolveProjectReferences">
<ItemGroup>
<_Temporary Remove="@(_Temporary)" />
</ItemGroup>
<MSBuild Targets="OpenApiGetDocuments"
BuildInParallel="$(BuildInParallel)"
Projects="@(OpenApiProjectReference)"
RebaseOutputs="true"
RemoveProperties="RuntimeIdentifier;TargetFrameworks;%(OpenApiProjectReference.GlobalPropertiesToRemove)">
<Output TaskParameter="TargetOutputs" ItemName="_Temporary" />
</MSBuild>
<ItemGroup>
<OpenApiReference Include="@(_Temporary)" Exclude="@(OpenApiReference)" RemoveMetadata="FullConfiguration">
<SourceProject>%(_Temporary.OriginalItemSpec)</SourceProject>
</OpenApiReference>
<_Temporary Remove="@(_Temporary)" />
</ItemGroup>
</Target>
<!-- OpenApiReference support. -->
<Target Name="_GetMetadataForOpenApiReferences" Condition="'@(OpenApiReference)' != ''">
<ItemGroup>
<_Temporary Remove="@(_Temporary)" />
</ItemGroup>
<GetOpenApiReferenceMetadata Inputs="@(OpenApiReference)"
Extension="$(DefaultLanguageSourceExtension)"
Namespace="$(RootNamespace)"
OutputDirectory="$(OpenApiCodeDirectory)">
<Output TaskParameter="Outputs" ItemName="_Temporary" />
</GetOpenApiReferenceMetadata>
<ItemGroup>
<OpenApiReference Remove="@(OpenApiReference)" />
<OpenApiReference Include="@(_Temporary)" />
<_Temporary Remove="@(_Temporary)" />
</ItemGroup>
</Target>
<Target Name="_GetCurrentOpenApiReference">
<GetCurrentOpenApiReference Input="$(GeneratorMetadata)">
<Output TaskParameter="Outputs" ItemName="CurrentOpenApiReference" />
</GetCurrentOpenApiReference>
</Target>
<Target Name="_InnerGenerateOpenApiCode" DependsOnTargets="_GetCurrentOpenApiReference;$(GeneratorTarget)" />
<!-- Note target will **always** execute when generator uses the OutputPath as a directory. -->
<Target Name="_GenerateOpenApiCode"
Condition="$(OpenApiGenerateCodeAtDesignTime) OR ('$(DesignTimeBuild)' != 'true' AND '$(BuildingProject)' == 'true')"
Inputs="@(OpenApiReference)"
Outputs="%(OutputPath)">
<Error Condition="!Exists('%(OpenApiReference.FullPath)')" Text="Input OpenAPI file %(Identity) does not exist." />
<MSBuild Projects="$(MSBuildProjectFullPath)"
BuildInParallel="$(BuildInParallel)"
Properties="GeneratorTargetPath=%(OpenApiReference.OutputPath);GeneratorTarget=Generate%(CodeGenerator);GeneratorMetadata=%(SerializedMetadata)"
Targets="_InnerGenerateOpenApiCode" />
</Target>
<Target Name="_CreateCompileItemsForOpenApiReferences" Condition="'@(OpenApiReference)' != ''">
<ItemGroup>
<_Files Remove="@(_Files)" />
<_Files Include="@(OpenApiReference -> '%(OutputPath)')"
Condition="$([System.IO.File]::Exists('%(OpenApiReference.OutputPath)'))" />
<_Directories Remove="@(_Directories)" />
<_Directories Include="@(OpenApiReference -> '%(OutputPath)')"
Condition="Exists('%(OpenApiReference.OutputPath)') AND ! $([System.IO.File]::Exists('%(OpenApiReference.OutputPath)'))" />
</ItemGroup>
<ItemGroup>
<_Files SourceDocument="%(OriginalItemSpec)" RemoveMetadata="OriginalItemSpec" />
<_Directories SourceDocument="%(OriginalItemSpec)" RemoveMetadata="OriginalItemSpec" />
</ItemGroup>
<ItemGroup>
<!-- If OutputPath is a file, add it directly to relevant items. -->
<TypeScriptCompile Include="@(_Files)"
Exclude="@(TypeScriptCompile)"
Condition="'%(_Files.Extension)' == '.ts' OR '%(_Files.Extension)' == '.tsx'" />
<Compile Include="@(_Files)"
Exclude="@(Compile)"
Condition="'$(DefaultLanguageSourceExtension)' != '.ts' AND '%(_Files.Extension)' == '$(DefaultLanguageSourceExtension)'" />
</ItemGroup>
<!--
Otherwise, add all descendant files with the expected extension. Glob into _Directories before updating
TypeScriptCompile or Compile items. See <https://github.com/dotnet/msbuild/issues/3274> and workaround in
<https://stackoverflow.com/questions/48868060/can-a-task-itemgroup-glob-files>. Unfortunately, this workaround
loses SourceDocument and other metadata.
-->
<PropertyGroup>
<_TypeScriptCompileItemsFromDirectories>@(_Directories -> '%(Identity)/**/*.ts;%(Identity)/**/*.tsx')</_TypeScriptCompileItemsFromDirectories>
<_CompileItemsFromDirectories>@(_Directories -> '%(Identity)/**/*$(DefaultLanguageSourceExtension)')</_CompileItemsFromDirectories>
</PropertyGroup>
<ItemGroup>
<TypeScriptCompile Include="$(_TypeScriptCompileItemsFromDirectories)" Exclude="@(TypeScriptCompile)" />
<Compile Include="$(_CompileItemsFromDirectories)"
Exclude="@(Compile)"
Condition="'$(DefaultLanguageSourceExtension)' != '.ts'" />
<FileWrites Include="@(_Files);$(_TypeScriptCompileItemsFromDirectories);$(_CompileItemsFromDirectories)"
Exclude="@(FileWrites)" />
<_Files Remove="@(_Files)" />
<_Directories Remove="@(_Directories)" />
</ItemGroup>
<PropertyGroup>
<_TypeScriptCompileItemsFromDirectories />
<_CompileItemsFromDirectories />
</PropertyGroup>
</Target>
<!-- Inform users of breaking changes in this file and Microsoft.Extensions.ApiDescription.Client.props. -->
<Target Name="_GenerateErrorsForOldItems">
<Error Condition="'@(ServiceProjectReference)' != ''" Text="ServiceProjectReference items are no longer supported." />
<Error Condition="'@(ServiceUriReference)' != ''" Text="ServiceUriReference items are no longer supported." />
<Error Condition="'@(ServiceFileReference)' != ''" Text="ServiceFileReference items are no longer supported." />
</Target>
<!-- Main code generation entry point. -->
<Target Name="GenerateOpenApiCode" DependsOnTargets="$(GenerateOpenApiCodeDependsOn)" />
<!--
Unless this is an inner build or default timing is disabled, tie code generation into the build. Separate from
GenerateOpenApiCode and not invoked from the ../buildMultiTargeting targets to prevent repeated code generation
when multi-targeting.
-->
<Target Name="_TieInGenerateOpenApiCode"
BeforeTargets="BeforeCompile"
Condition=" '$(OpenApiGenerateCodeOnBuild)' == 'true' AND ('$(TargetFramework)' == '' OR '$(TargetFrameworks)' == '') "
DependsOnTargets="GenerateOpenApiCode" />
</Project>