1
+ <Project xmlns =" http://schemas.microsoft.com/developer/msbuild/2003" >
2
+ <!-- Prevent dotnet template engine to parse this file -->
3
+ <!-- /-:cnd:noEmit-->
4
+ <PropertyGroup >
5
+ <!-- Mark that this target file has been loaded. -->
6
+ <IsPaketRestoreTargetsFileLoaded >true</IsPaketRestoreTargetsFileLoaded >
7
+ <PaketToolsPath >$(MSBuildThisFileDirectory)</PaketToolsPath >
8
+ <PaketRootPath >$(MSBuildThisFileDirectory)..\</PaketRootPath >
9
+ <PaketRestoreCacheFile >$(PaketRootPath)paket-files\paket.restore.cached</PaketRestoreCacheFile >
10
+ <PaketLockFilePath >$(PaketRootPath)paket.lock</PaketLockFilePath >
11
+ <MonoPath Condition =" '$(MonoPath)' == '' And Exists('/Library/Frameworks/Mono.framework/Commands/mono')" >/Library/Frameworks/Mono.framework/Commands/mono</MonoPath >
12
+ <MonoPath Condition =" '$(MonoPath)' == ''" >mono</MonoPath >
13
+ <!-- Paket command -->
14
+ <PaketExePath Condition =" '$(PaketExePath)' == '' AND Exists('$(PaketRootPath)paket.exe')" >$(PaketRootPath)paket.exe</PaketExePath >
15
+ <PaketExePath Condition =" '$(PaketExePath)' == '' " >$(PaketToolsPath)paket.exe</PaketExePath >
16
+ <PaketCommand Condition =" '$(OS)' == 'Windows_NT'" >"$(PaketExePath)"</PaketCommand >
17
+ <PaketCommand Condition =" '$(OS)' != 'Windows_NT' " >$(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)"</PaketCommand >
18
+ <PaketBootStrapperExePath Condition =" '$(PaketBootStrapperExePath)' == '' AND Exists('$(PaketRootPath)paket.bootstrapper.exe')" >$(PaketRootPath)paket.bootstrapper.exe</PaketBootStrapperExePath >
19
+ <PaketBootStrapperExePath Condition =" '$(PaketBootStrapperExePath)' == '' " >$(PaketToolsPath)paket.bootstrapper.exe</PaketBootStrapperExePath >
20
+ <PaketBootStrapperCommand Condition =" '$(OS)' == 'Windows_NT'" >"$(PaketBootStrapperExePath)"</PaketBootStrapperCommand >
21
+ <PaketBootStrapperCommand Condition =" '$(OS)' != 'Windows_NT' " >$(MonoPath) --runtime=v4.0.30319 "$(PaketBootStrapperExePath)"</PaketBootStrapperCommand >
22
+
23
+ <!-- Disable automagic references for F# dotnet sdk -->
24
+ <!-- This will not do anything for other project types -->
25
+ <!-- see https://github.com/fsharp/fslang-design/blob/master/RFCs/FS-1032-fsharp-in-dotnet-sdk.md -->
26
+ <DisableImplicitFSharpCoreReference >true</DisableImplicitFSharpCoreReference >
27
+ <DisableImplicitSystemValueTupleReference >true</DisableImplicitSystemValueTupleReference >
28
+ </PropertyGroup >
29
+
30
+ <Target Name =" PaketRestore" BeforeTargets =" _GenerateDotnetCliToolReferenceSpecs;_GenerateProjectRestoreGraphPerFramework;_GenerateRestoreGraphWalkPerFramework;CollectPackageReferences" >
31
+
32
+ <!-- Step 1 Check if lockfile is properly restored -->
33
+ <PropertyGroup >
34
+ <PaketRestoreRequired >true</PaketRestoreRequired >
35
+ </PropertyGroup >
36
+
37
+ <PropertyGroup Condition =" Exists('$(PaketRestoreCacheFile)') " >
38
+ <PaketRestoreCachedHash >$([System.IO.File]::ReadAllText('$(PaketRestoreCacheFile)'))</PaketRestoreCachedHash >
39
+ <PaketRestoreLockFileHash >$([System.IO.File]::ReadAllText('$(PaketLockFilePath)'))</PaketRestoreLockFileHash >
40
+ <PaketRestoreRequired >true</PaketRestoreRequired >
41
+ <PaketRestoreRequired Condition =" '$(PaketRestoreLockFileHash)' == '$(PaketRestoreCachedHash)' " >false</PaketRestoreRequired >
42
+ <PaketRestoreRequired Condition =" '$(PaketRestoreLockFileHash)' == '' " >true</PaketRestoreRequired >
43
+ </PropertyGroup >
44
+
45
+ <!-- Do a global restore if required -->
46
+ <Exec Command =' $(PaketBootStrapperCommand)' Condition =" Exists('$(PaketBootStrapperExePath)') AND !(Exists('$(PaketExePath)'))" ContinueOnError =" false" />
47
+ <Exec Command =' $(PaketCommand) restore' Condition =" '$(PaketRestoreRequired)' == 'true' " ContinueOnError =" false" />
48
+
49
+ <!-- Step 2 Detect project specific changes -->
50
+ <PropertyGroup >
51
+ <PaketReferencesCachedFilePath >$(MSBuildProjectDirectory)\obj\$(MSBuildProjectFile).paket.references.cached</PaketReferencesCachedFilePath >
52
+ <!-- MyProject.fsproj.paket.references has the highest precedence -->
53
+ <PaketOriginalReferencesFilePath >$(MSBuildProjectFullPath).paket.references</PaketOriginalReferencesFilePath >
54
+ <!-- MyProject.paket.references -->
55
+ <PaketOriginalReferencesFilePath Condition =" !Exists('$(PaketOriginalReferencesFilePath)')" >$(MSBuildProjectDirectory)\$(MSBuildProjectName).paket.references</PaketOriginalReferencesFilePath >
56
+ <!-- paket.references -->
57
+ <PaketOriginalReferencesFilePath Condition =" !Exists('$(PaketOriginalReferencesFilePath)')" >$(MSBuildProjectDirectory)\paket.references</PaketOriginalReferencesFilePath >
58
+ <PaketResolvedFilePath >$(MSBuildProjectDirectory)\obj\$(MSBuildProjectFile).$(TargetFramework).paket.resolved</PaketResolvedFilePath >
59
+ <PaketRestoreRequired >true</PaketRestoreRequired >
60
+ <PaketRestoreRequiredReason >references-file-or-cache-not-found</PaketRestoreRequiredReason >
61
+ </PropertyGroup >
62
+
63
+ <!-- Step 2 a Detect changes in references file -->
64
+ <PropertyGroup Condition =" Exists('$(PaketOriginalReferencesFilePath)') AND Exists('$(PaketReferencesCachedFilePath)') " >
65
+ <PaketRestoreCachedHash >$([System.IO.File]::ReadAllText('$(PaketReferencesCachedFilePath)'))</PaketRestoreCachedHash >
66
+ <PaketRestoreReferencesFileHash >$([System.IO.File]::ReadAllText('$(PaketOriginalReferencesFilePath)'))</PaketRestoreReferencesFileHash >
67
+ <PaketRestoreRequiredReason >references-file</PaketRestoreRequiredReason >
68
+ <PaketRestoreRequired Condition =" '$(PaketRestoreReferencesFileHash)' == '$(PaketRestoreCachedHash)' " >false</PaketRestoreRequired >
69
+ </PropertyGroup >
70
+
71
+ <PropertyGroup Condition =" !Exists('$(PaketOriginalReferencesFilePath)') AND !Exists('$(PaketReferencesCachedFilePath)') " >
72
+ <!-- If both don't exist there is nothing to do. -->
73
+ <PaketRestoreRequired >false</PaketRestoreRequired >
74
+ </PropertyGroup >
75
+
76
+ <!-- Step 2 b detect relevant changes in project file (new targetframework) -->
77
+ <PropertyGroup Condition =" !Exists('$(PaketResolvedFilePath)') AND '$(TargetFramework)' != '' " >
78
+ <PaketRestoreRequired >true</PaketRestoreRequired >
79
+ <PaketRestoreRequiredReason >target-framework '$(TargetFramework)'</PaketRestoreRequiredReason >
80
+ </PropertyGroup >
81
+
82
+ <!-- Step 3 Restore project specific stuff if required -->
83
+ <Warning Condition =" '$(PaketRestoreRequired)' == 'true' " Text =" Detected a change ('$(PaketRestoreRequiredReason)') in the project file '$(MSBuildProjectFullPath)', calling paket restore" />
84
+ <Exec Command =' $(PaketCommand) restore --project "$(MSBuildProjectFullPath)"' Condition =" '$(PaketRestoreRequired)' == 'true' " ContinueOnError =" false" />
85
+
86
+ <!-- This shouldn't actually happen, but just to be sure. -->
87
+ <Error Condition =" !Exists('$(PaketResolvedFilePath)') AND '$(TargetFramework)' != '' " Text =" A paket file for the framework '$(TargetFramework)' is missing. Please delete 'paket-files/paket.restore.cached' and call 'paket restore'." />
88
+
89
+ <!-- Step 4 forward all msbuild properties (PackageReference, DotNetCliToolReference) to msbuild -->
90
+ <ReadLinesFromFile Condition =" Exists('$(PaketResolvedFilePath)')" File =" $(PaketResolvedFilePath)" >
91
+ <Output TaskParameter =" Lines" ItemName =" PaketReferencesFileLines" />
92
+ </ReadLinesFromFile >
93
+
94
+ <ItemGroup Condition =" Exists('$(PaketResolvedFilePath)') AND '@(PaketReferencesFileLines)' != '' " >
95
+ <PaketReferencesFileLinesInfo Include =" @(PaketReferencesFileLines)" >
96
+ <PackageName >$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[0])</PackageName >
97
+ <PackageVersion >$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[1])</PackageVersion >
98
+ </PaketReferencesFileLinesInfo >
99
+ <PackageReference Include =" %(PaketReferencesFileLinesInfo.PackageName)" >
100
+ <Version >%(PaketReferencesFileLinesInfo.PackageVersion)</Version >
101
+ </PackageReference >
102
+ </ItemGroup >
103
+
104
+ <PropertyGroup >
105
+ <PaketCliToolFilePath >$(MSBuildProjectDirectory)/obj/$(MSBuildProjectFile).paket.clitools</PaketCliToolFilePath >
106
+ </PropertyGroup >
107
+
108
+ <ReadLinesFromFile File =" $(PaketCliToolFilePath)" >
109
+ <Output TaskParameter =" Lines" ItemName =" PaketCliToolFileLines" />
110
+ </ReadLinesFromFile >
111
+
112
+ <ItemGroup Condition =" '@(PaketCliToolFileLines)' != '' " >
113
+ <PaketCliToolFileLinesInfo Include =" @(PaketCliToolFileLines)" >
114
+ <PackageName >$([System.String]::Copy('%(PaketCliToolFileLines.Identity)').Split(',')[0])</PackageName >
115
+ <PackageVersion >$([System.String]::Copy('%(PaketCliToolFileLines.Identity)').Split(',')[1])</PackageVersion >
116
+ </PaketCliToolFileLinesInfo >
117
+ <DotNetCliToolReference Include =" %(PaketCliToolFileLinesInfo.PackageName)" >
118
+ <Version >%(PaketCliToolFileLinesInfo.PackageVersion)</Version >
119
+ </DotNetCliToolReference >
120
+ </ItemGroup >
121
+
122
+ <PropertyGroup >
123
+ <RestoreConfigFile >$(MSBuildProjectDirectory)/obj/$(MSBuildProjectFile).NuGet.Config</RestoreConfigFile >
124
+ </PropertyGroup >
125
+
126
+ </Target >
127
+
128
+ <Target Name =" PaketDisableDirectPack" AfterTargets =" _IntermediatePack" BeforeTargets =" GenerateNuspec" Condition =" ('$(IsPackable)' == '' Or '$(IsPackable)' == 'true') And Exists('$(MSBuildProjectDirectory)/obj/$(MSBuildProjectFile).references')" >
129
+ <PropertyGroup >
130
+ <ContinuePackingAfterGeneratingNuspec >false</ContinuePackingAfterGeneratingNuspec >
131
+ </PropertyGroup >
132
+ </Target >
133
+
134
+ <Target Name =" PaketOverrideNuspec" AfterTargets =" GenerateNuspec" Condition =" ('$(IsPackable)' == '' Or '$(IsPackable)' == 'true') And Exists('$(MSBuildProjectDirectory)/obj/$(MSBuildProjectFile).references')" >
135
+ <PropertyGroup >
136
+ <PaketProjectFile >$(MSBuildProjectDirectory)/$(MSBuildProjectFile)</PaketProjectFile >
137
+ <ContinuePackingAfterGeneratingNuspec >true</ContinuePackingAfterGeneratingNuspec >
138
+ <UseNewPack >false</UseNewPack >
139
+ <UseNewPack Condition =" '$(NuGetToolVersion)' != '4.0.0' " >true</UseNewPack >
140
+ </PropertyGroup >
141
+
142
+ <ItemGroup >
143
+ <_NuspecFiles Include =" $(BaseIntermediateOutputPath)*.nuspec" />
144
+ </ItemGroup >
145
+
146
+ <Exec Command =' $(PaketCommand) fix-nuspecs files "@(_NuspecFiles)" project-file "$(PaketProjectFile)" ' Condition =" @(_NuspecFiles) != ''" />
147
+
148
+ <ConvertToAbsolutePath Condition =" @(_NuspecFiles) != ''" Paths =" @(_NuspecFiles)" >
149
+ <Output TaskParameter =" AbsolutePaths" PropertyName =" NuspecFileAbsolutePath" />
150
+ </ConvertToAbsolutePath >
151
+
152
+ <!-- Call Pack -->
153
+ <PackTask Condition =" $(UseNewPack)"
154
+ PackItem =" $(PackProjectInputFile)"
155
+ PackageFiles =" @(_PackageFiles)"
156
+ PackageFilesToExclude =" @(_PackageFilesToExclude)"
157
+ PackageVersion =" $(PackageVersion)"
158
+ PackageId =" $(PackageId)"
159
+ Title =" $(Title)"
160
+ Authors =" $(Authors)"
161
+ Description =" $(Description)"
162
+ Copyright =" $(Copyright)"
163
+ RequireLicenseAcceptance =" $(PackageRequireLicenseAcceptance)"
164
+ LicenseUrl =" $(PackageLicenseUrl)"
165
+ ProjectUrl =" $(PackageProjectUrl)"
166
+ IconUrl =" $(PackageIconUrl)"
167
+ ReleaseNotes =" $(PackageReleaseNotes)"
168
+ Tags =" $(PackageTags)"
169
+ DevelopmentDependency =" $(DevelopmentDependency)"
170
+ BuildOutputInPackage =" @(_BuildOutputInPackage)"
171
+ TargetPathsToSymbols =" @(_TargetPathsToSymbols)"
172
+ TargetFrameworks =" @(_TargetFrameworks)"
173
+ AssemblyName =" $(AssemblyName)"
174
+ PackageOutputPath =" $(PackageOutputAbsolutePath)"
175
+ IncludeSymbols =" $(IncludeSymbols)"
176
+ IncludeSource =" $(IncludeSource)"
177
+ PackageTypes =" $(PackageType)"
178
+ IsTool =" $(IsTool)"
179
+ RepositoryUrl =" $(RepositoryUrl)"
180
+ RepositoryType =" $(RepositoryType)"
181
+ SourceFiles =" @(_SourceFiles->Distinct())"
182
+ NoPackageAnalysis =" $(NoPackageAnalysis)"
183
+ MinClientVersion =" $(MinClientVersion)"
184
+ Serviceable =" $(Serviceable)"
185
+ FrameworkAssemblyReferences =" @(_FrameworkAssemblyReferences)"
186
+ ContinuePackingAfterGeneratingNuspec =" $(ContinuePackingAfterGeneratingNuspec)"
187
+ NuspecOutputPath =" $(BaseIntermediateOutputPath)"
188
+ IncludeBuildOutput =" $(IncludeBuildOutput)"
189
+ BuildOutputFolder =" $(BuildOutputTargetFolder)"
190
+ ContentTargetFolders =" $(ContentTargetFolders)"
191
+ RestoreOutputPath =" $(RestoreOutputAbsolutePath)"
192
+ NuspecFile =" $(NuspecFileAbsolutePath)"
193
+ NuspecBasePath =" $(NuspecBasePath)"
194
+ NuspecProperties =" $(NuspecProperties)" />
195
+
196
+ <PackTask Condition =" ! $(UseNewPack)"
197
+ PackItem =" $(PackProjectInputFile)"
198
+ PackageFiles =" @(_PackageFiles)"
199
+ PackageFilesToExclude =" @(_PackageFilesToExclude)"
200
+ PackageVersion =" $(PackageVersion)"
201
+ PackageId =" $(PackageId)"
202
+ Title =" $(Title)"
203
+ Authors =" $(Authors)"
204
+ Description =" $(Description)"
205
+ Copyright =" $(Copyright)"
206
+ RequireLicenseAcceptance =" $(PackageRequireLicenseAcceptance)"
207
+ LicenseUrl =" $(PackageLicenseUrl)"
208
+ ProjectUrl =" $(PackageProjectUrl)"
209
+ IconUrl =" $(PackageIconUrl)"
210
+ ReleaseNotes =" $(PackageReleaseNotes)"
211
+ Tags =" $(PackageTags)"
212
+ TargetPathsToAssemblies =" @(_TargetPathsToAssemblies->'%(FinalOutputPath)')"
213
+ TargetPathsToSymbols =" @(_TargetPathsToSymbols)"
214
+ TargetFrameworks =" @(_TargetFrameworks)"
215
+ AssemblyName =" $(AssemblyName)"
216
+ PackageOutputPath =" $(PackageOutputAbsolutePath)"
217
+ IncludeSymbols =" $(IncludeSymbols)"
218
+ IncludeSource =" $(IncludeSource)"
219
+ PackageTypes =" $(PackageType)"
220
+ IsTool =" $(IsTool)"
221
+ RepositoryUrl =" $(RepositoryUrl)"
222
+ RepositoryType =" $(RepositoryType)"
223
+ SourceFiles =" @(_SourceFiles->Distinct())"
224
+ NoPackageAnalysis =" $(NoPackageAnalysis)"
225
+ MinClientVersion =" $(MinClientVersion)"
226
+ Serviceable =" $(Serviceable)"
227
+ AssemblyReferences =" @(_References)"
228
+ ContinuePackingAfterGeneratingNuspec =" $(ContinuePackingAfterGeneratingNuspec)"
229
+ NuspecOutputPath =" $(BaseIntermediateOutputPath)"
230
+ IncludeBuildOutput =" $(IncludeBuildOutput)"
231
+ BuildOutputFolder =" $(BuildOutputTargetFolder)"
232
+ ContentTargetFolders =" $(ContentTargetFolders)"
233
+ RestoreOutputPath =" $(RestoreOutputAbsolutePath)"
234
+ NuspecFile =" $(NuspecFileAbsolutePath)"
235
+ NuspecBasePath =" $(NuspecBasePath)"
236
+ NuspecProperties =" $(NuspecProperties)" />
237
+ </Target >
238
+ <!-- /+:cnd:noEmit-->
239
+ </Project >
0 commit comments