Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[msbuild] Fix how UnpackLibraryResources handles mscorlib.dll (and potentially other framework assemblies) #1011

Merged
merged 3 commits into from
Jan 10, 2017

Commits on Oct 20, 2016

  1. [msbuild] Fix how UnpackLibraryResources handles mscorlib.dll (and po…

    …tentially other framework assemblies)
    
    	Target _UnpackLibraryResources:
    	Task "UnpackLibraryResources"
    		Using task UnpackLibraryResources from Xamarin.MacDev.Tasks.UnpackLibraryResources, Xamarin.MacDev.Tasks, Version=1.0.6128.15885, Culture=neutral, PublicKeyToken=null
    		UnpackLibraryResources Task
    		  Prefix: monotouch
    		  IntermediateOutputPath: obj/iPhone/Debug/
    		  NoOverwrite:
    		    obj/iPhone/Debug/ibtool-link/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib
    		    obj/iPhone/Debug/ibtool-link/LaunchScreen.storyboardc/Info.plist
    		    obj/iPhone/Debug/ibtool-link/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib
    		    obj/iPhone/Debug/ibtool-link/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib
    		    obj/iPhone/Debug/ibtool-link/Main.storyboardc/Info.plist
    		    obj/iPhone/Debug/ibtool-link/Main.storyboardc/UIViewController-BYZ-38-t0r.nib
    		  ReferencedLibraries:
    		    /Users/poupou/git/xamarin/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.iOS/System.dll
    		    /Users/poupou/git/xamarin/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.iOS/System.Xml.dll
    		    /Users/poupou/git/xamarin/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.iOS/System.Core.dll
    		    /Users/poupou/git/xamarin/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.iOS/Xamarin.iOS.dll
    		    /Users/poupou/Downloads/LinkingTest-2/RMSDKWrapper/bin/Debug//RMSDKWrapper.dll
    		    /Users/poupou/git/xamarin/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.iOS//mscorlib.dll
    		    /Users/poupou/git/xamarin/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.iOS//mscorlib.dll
    		  Skipping framework assembly: /Users/poupou/git/xamarin/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.iOS/System.dll
    		  Skipping framework assembly: /Users/poupou/git/xamarin/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.iOS/System.Xml.dll
    		  Skipping framework assembly: /Users/poupou/git/xamarin/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.iOS/System.Core.dll
    		  Skipping framework assembly: /Users/poupou/git/xamarin/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.iOS/Xamarin.iOS.dll
    		  Inspecting assembly: /Users/poupou/Downloads/LinkingTest-2/RMSDKWrapper/bin/Debug//RMSDKWrapper.dll
    		  Inspecting assembly: /Users/poupou/git/xamarin/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.iOS//mscorlib.dll
    		  Inspecting assembly: /Users/poupou/git/xamarin/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.iOS//mscorlib.dll
    	Done executing task "UnpackLibraryResources"
    	Done building target "_UnpackLibraryResources" in project "/Users/poupou/Downloads/LinkingTest-2/LinkingTest/LinkingTest.csproj".
    
    The above log excerpt shows two issues:
    
    1. mscorlib.dll is needlessly inspected as it's **not** considered a
       "framework" assembly.
    
       The current check was checking *how* it was resolved and not *where*
       it was resolved to. The later is the most important as it's possible
       for other assemblies to have direct paths references and we do not
       want to process them.
    
       This is fixed by comparing each assembly path with the (now) provided
       `TargetFrameworkDirectory`
    
    2. mscorlib.dll is inspected twice
    
       That's because it's present two times in the task's input. That issue
       is upstream (not sure why) of the current task but it makes #1 twice
       as costly. The fix for #1 indirectly fix that too.
    
    Future
    ------
    
    It's worth investigating to move that logic into `mtouch`. The later must
    already load all assemblies and is in charge of removing other embedded
    data (e.g. native code from bindings) from the assemblies (so they are not
    shipped both inside and outside the .dll in the final .app). This makes
    this task seems extraneous work.
    
    Considering that my current test case, `RMSDKWrapper.dll`, is 1.3GB in
    size it's easy to see that the extra load (which has nothing to be
    extracted wrt resources*) is quite visible in build time.
    
    >  3268.201 ms  UnpackLibraryResources                                  1 calls
    
    * it has for bindings but that's already handled by mtouch
    spouliot committed Oct 20, 2016
    Configuration menu
    Copy the full SHA
    b438121 View commit details
    Browse the repository at this point in the history

Commits on Jan 10, 2017

  1. Configuration menu
    Copy the full SHA
    9dcebe3 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    68c2df1 View commit details
    Browse the repository at this point in the history