@@ -11,6 +11,7 @@ open Paket.PackageSources
1111open Paket.Requirements
1212open System.Collections .Generic
1313open System
14+ open ProviderImplementation.AssemblyReader
1415
1516let updatePackagesConfigFile ( model : Map < GroupName * PackageName , SemVerInfo * InstallSettings >) packagesConfigFileName =
1617 let packagesInConfigFile = PackagesConfigFile.Read packagesConfigFileName
@@ -293,22 +294,25 @@ let private applyBindingRedirects isFirstGroup createNewBindingFiles cleanBindin
293294 librariesForPackage
294295 |> Seq.choose( fun ( library , redirects , profile ) ->
295296 try
296- let assembly = Mono.Cecil.AssemblyDefinition.ReadAssembly( library.Path)
297- Some ( assembly, BindingRedirects.getPublicKeyToken assembly, assembly.MainModule.AssemblyReferences, redirects, profile)
297+ let assemblyReader =
298+ ILModuleReaderAfterReadingAllBytes( library.Path, mkILGlobals EcmaMscorlibScopeRef)
299+ let assembly = assemblyReader.ILModuleDef.ManifestOfAssembly
300+ let assemblyName = assembly.GetName()
301+ Some ( assembly, BindingRedirects.getPublicKeyToken assemblyName, assemblyReader.ILAssemblyRefs, redirects, profile)
298302 with _ -> None)
299- |> Seq.sortBy( fun ( assembly , _ , _ , _ , _ ) -> assembly.Name. Version)
303+ |> Seq.sortBy( fun ( assembly , _ , _ , _ , _ ) -> assembly.Version)
300304 |> Seq.toList
301305 |> List.rev
302306 |> function | head :: _ -> Some head | _ -> None)
303307 |> Seq.cache
304308
305- let referencesDifferentProfiles ( assemblyName : Mono.Cecil.AssemblyNameDefinition ) profile =
309+ let referencesDifferentProfiles assemblyName assemblyVersion profile =
306310 ( targetProfiles |> Seq.exists ((=) profile))
307311 && assemblies
308312 |> Seq.filter ( fun ( _ , _ , _ , _ , p ) -> p <> profile)
309- |> Seq.map ( fun ( a , _ , _ , _ , _ ) -> a.Name )
310- |> Seq.filter ( fun a -> a.Name = assemblyName.Name )
311- |> Seq.exists ( fun a -> a.Version <> assemblyName.Version )
313+ |> Seq.map ( fun ( a , _ , _ , _ , _ ) -> a)
314+ |> Seq.filter ( fun a -> a.Name = assemblyName)
315+ |> Seq.exists ( fun a -> a.Version <> assemblyVersion )
312316
313317 assemblies
314318 |> Seq.choose ( fun ( assembly , token , refs , redirects , profile ) ->
@@ -320,16 +324,15 @@ let private applyBindingRedirects isFirstGroup createNewBindingFiles cleanBindin
320324 | Some BindingRedirectsSettings.Off -> false
321325 | _ -> false )
322326 |> Seq.filter ( fun ( assembly , _ , _ , redirects , profile ) ->
323- let assemblyName = assembly.Name
324327 redirects = Some BindingRedirectsSettings.Force
325- || referencesDifferentProfiles assemblyName profile
328+ || referencesDifferentProfiles assembly.Name assembly.Version profile
326329 || assemblies
327330 |> Seq.collect ( fun ( _ , _ , refs , _ , _ ) -> refs)
328- |> Seq.filter ( fun a -> assemblyName .Name = a.Name)
329- |> Seq.exists ( fun a -> assemblyName .Version > a.Version))
331+ |> Seq.filter ( fun a -> assembly .Name = a.Name)
332+ |> Seq.exists ( fun a -> assembly .Version > a.Version))
330333 |> Seq.map( fun ( assembly , token , _ , _ , _ ) ->
331- { BindingRedirect.AssemblyName = assembly.Name.Name
332- Version = assembly.Name.Version. ToString()
334+ { BindingRedirect.AssemblyName = assembly.Name
335+ Version = Option.fold ( fun _ x -> x. ToString()) " 0.0.0.0 " assembly.Version
333336 PublicKeyToken = token
334337 Culture = None })
335338 |> Seq.sort
0 commit comments