blob: 8b837759dddf51f7df64bf6c0a7cb0cbde79deac (
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
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
|
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="GenerateEncryptedNuGetConfig" AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll" />
<UsingTask TaskName="GenerateUnencryptedNuGetConfig" AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll" />
<UsingTask TaskName="EncryptedConfigNuGetRestore" AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll" />
<UsingTask TaskName="PrereleaseResolveNuGetPackageAssets" AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll" />
<Target Name="RestoreOptionalToolingPackages"
DependsOnTargets="RestoreOptionalToolingEncrypted;
CleanOptionalToolingRestore"
BeforeTargets="Sync"
Condition="'$(OptionalToolSource)'!=''" />
<!--
Create items for any feeds specified by parameters. This makes it easy to pass in an optional
source with an msbuild command.
-->
<Target Name="CreateOptionalRestoreFeedItems">
<ItemGroup>
<OptionalRestoreSource Include="FeedFromProperties">
<Uri>$(OptionalToolSource)</Uri>
<Username Condition="'$(OptionalToolSourceUser)'!=''">$(OptionalToolSourceUser)</Username>
<Password Condition="'$(OptionalToolSourcePassword)'!=''">$(OptionalToolSourcePassword)</Password>
</OptionalRestoreSource>
</ItemGroup>
</Target>
<!--
Determine the paths of the optional tool runtime project.json/MSBuild project and lockfile.
Note: Either project.json ($(OptionalToolingJsonPath)) or MSBuild project ($(OptionalToolingProjectPath))
should be set at one time.
-->
<Target Name="GetOptionalToolingPaths">
<PropertyGroup>
<OptionalToolingDir>$(ToolsDir)optional-tool-runtime</OptionalToolingDir>
</PropertyGroup>
<PropertyGroup Condition="'$(OptionalToolingProjectPath)' == ''">
<OptionalToolingJsonPath Condition="'$(OptionalToolingJsonPath)' == ''">$(OptionalToolingDir)\optional.json</OptionalToolingJsonPath>
<OptionalToolingProjectJsonPath>$(OptionalToolingDir)\project.json</OptionalToolingProjectJsonPath>
<OptionalToolingProjectLockJsonPath>$(OptionalToolingDir)\project.lock.json</OptionalToolingProjectLockJsonPath>
</PropertyGroup>
<PropertyGroup Condition="'$(OptionalToolingProjectPath)' != ''">
<OptionalToolingProjectAssetsJsonPath>$(OptionalToolingDir)\project.assets.json</OptionalToolingProjectAssetsJsonPath>
</PropertyGroup>
</Target>
<Target Name="PrepareOptionalToolProject"
DependsOnTargets="GetOptionalToolingPaths">
<!--
Copy the mangled "optional.json" file to "project.json", so that we can restore it. The name
is optional.json so that recursive restore will not normally find the file: it contains
optional tooling that typical recursive restores do not provide, such as the buildtools build.
-->
<Copy Condition="'$(OptionalToolingProjectJsonPath)' != ''"
SourceFiles="$(OptionalToolingJsonPath)"
DestinationFiles="$(OptionalToolingProjectJsonPath)"
SkipUnchangedFiles="true" />
</Target>
<!--
Restore optional tooling using a NuGet.Config on disk with encrypted credentials inside.
-->
<Target Name="RestoreOptionalToolingEncrypted"
DependsOnTargets="CreateOptionalRestoreFeedItems;
PrepareOptionalToolProject">
<PropertyGroup>
<GeneratedNuGetConfigDir>$(BaseIntermediateOutputPath)generatedNuGetConfig/</GeneratedNuGetConfigDir>
<OptionalRestoreConfigPath>$(GeneratedNuGetConfigDir)optional.NuGet.Config</OptionalRestoreConfigPath>
</PropertyGroup>
<GenerateEncryptedNuGetConfig ConfigPath="$(OptionalRestoreConfigPath)"
Sources="@(OptionalRestoreSource)"
PackagesDir="$(PackagesDir)" />
<!-- restore the project.json file, if it is being used -->
<EncryptedConfigNuGetRestore Condition="'$(OptionalToolingProjectJsonPath)' != ''"
Inputs="$(OptionalToolingProjectJsonPath)"
ConfigFile="$(OptionalRestoreConfigPath)"
PackagesDir="$(PackagesDir)" />
<!-- restore the MSBuild project file, if it is being used -->
<Exec Condition="'$(OptionalToolingProjectPath)' != ''"
Command=""$(DotnetToolCommand)" restore "$(OptionalToolingProjectPath)" --configfile "$(OptionalRestoreConfigPath)" /p:RestoreOutputPath="$(OptionalToolingDir)"" />
</Target>
<!--
Cleanup steps: try to ensure non-authenticated restore attempts don't attempt to restore
optional packages and reduce credential exposure to the remaining steps in the build.
-->
<Target Name="CleanOptionalToolingRestore"
Condition="'$(SkipCleanOptionalToolingRestore)'!='true'">
<ItemGroup>
<OptionalRestoreTemporaryFilePath Include="$(OptionalRestoreConfigPath);
$(OptionalToolingProjectJsonPath)" />
</ItemGroup>
<Delete Files="@(OptionalRestoreTemporaryFilePath)" Condition="Exists('%(Identity)')" />
</Target>
<!--
Resolve tooling from the optional restore lockfile. Other targets can find optional tooling
in ResolvedOptionalToolReferences.
-->
<Target Name="ResolveOptionalTools"
DependsOnTargets="GetOptionalToolingPaths">
<PropertyGroup>
<OptionalToolingProjectLockFilePath>$(OptionalToolingProjectLockJsonPath)</OptionalToolingProjectLockFilePath>
<OptionalToolingProjectLockFilePath Condition="'$(OptionalToolingProjectLockFilePath)' == ''">$(OptionalToolingProjectAssetsJsonPath)</OptionalToolingProjectLockFilePath>
</PropertyGroup>
<Error Text="Optional tooling has not been restored. Use the 'RestoreOptionalToolingPackages' target first."
Condition="!Exists('$(OptionalToolingProjectLockFilePath)')" />
<ItemGroup>
<OptionalToolingTargetMoniker Include=".NETFramework,Version=v4.5" />
</ItemGroup>
<PrereleaseResolveNuGetPackageAssets ProjectLockFile="$(OptionalToolingProjectLockFilePath)"
TargetMonikers="@(OptionalToolingTargetMoniker)">
<Output TaskParameter="ResolvedReferences" ItemName="ResolvedOptionalToolReferences" />
</PrereleaseResolveNuGetPackageAssets>
</Target>
</Project>
|