Inedo Community Forums Forums
    • Recent
    • Tags
    • Popular
    • Login

    Welcome to the Inedo Forums! Check out the Forums Guide for help getting started.

    If you are experiencing any issues with the forum software, please visit the Contact Form on our website and let us know!

    Why is the content from my .nupkg files getting lost when I publish symbols?

    Scheduled Pinned Locked Moved Support
    progetsymbolsnuget
    4 Posts 1 Posters 99 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • ? This user is from outside of this forum
      Guest
      last edited by

      I have a NuGet package I'm trying to publish that contains both assemblies and content files. After publishing the standard and symbols packages, the content files from the standard package are gone.

      When I run NuGet packaging the filesystem looks like this:

      MyProduct.nuspec
      content/
        Web.config.install.xdt
      lib/
        net45/
          MyProduct.dll
          MyProduct.pdb
          MyProduct.xml
      src/
        Class1.cs
        Class2.cs
      

      As you can see, I have it all set up and ready to go.

      I then run the commands to pack the NuGet packages using nuget.exe version 2.8.5:

      nuget.exe pack MyProduct.nuspec
      nuget.exe pack MyProduct.nuspec -Symbols
      

      What I get out of that is two package files:

      MyProduct.1.0.0.nupkg
      MyProduct.1.0.0.symbols.nupkg
      

      If I look inside the MyProduct.1.0.0.nupkg file, I see:

      content/
        Web.config.install.xdt
      lib/
        net45/
          MyProduct.dll
      

      If I look inside MyProduct.1.0.0.symbols.nupkg I see:

      lib/
        net45/
          MyProduct.dll
          MyProduct.pdb
          MyProduct.xml
      src/
        Class1.cs
        Class2.cs
      

      Note the important difference there: the symbols package doesn't contain the content files. That's not something I have control over - it's the way nuget.exe packages things and is the standard per the NuGet documentation.

      I then push the first package to my ProGet server:

      nuget.exe push MyProduct.1.0.0.nupkg myapikey -s http://proget/feeds/Default
      

      If I download that package immediately after pushing, I can open it up and see the content files are still there. It's exactly like the MyProduct.1.0.0.nupkg file that I pushed. ProGet doesn't show symbols as being available yet because, obviously, they're not.

      I then push the symbols package:

      nuget.exe push MyProduct.1.0.0.symbols.nupkg myapikey -s http://proget/feeds/Default
      

      ProGet now shows symbols as being available and I can download a symbol package that includes PDB and source files. If I download the symbols package MyProduct.1.0.0.symbols.nupkg from ProGet, it's exactly like the one I pushed.

      If I download the MyProduct.1.0.0.nupkg package now, after pushing symbols, the content files are gone. The MyProduct.1.0.0.nupkg on ProGet now looks like this inside:

      lib/
        net45/
          MyProduct.dll
      

      The content is gone.

      I did find this question where it sounded like folks assumed a symbol package only differs from a regular package by the fact that the symbol package has everything the regular package has with the addition of PDB and source files.

      This is not the case. Symbol packages strip out content, build, tools, and other stuff that isn't symbols.

      I am guessing that by uploading the symbols package, ProGet is dynamically re-creating the non-symbol package internally based on what's in the symbols package. I can't say for sure, but that's certainly how it appears.

      As a temporary workaround, I'm going to have to stop publishing symbols for this package until I have a resolution.

      Where did my content go and how can I get it back?

      Product: ProGet
      Version: 3.7.3

      1 Reply Last reply Reply Quote 0
      • ? This user is from outside of this forum
        Guest
        last edited by

        Interesting discovery:

        If I only do...

        nuget.exe pack MyProduct.nuspec
        

        ...then the package I get is the giant package with everything in it. It's the second command with the -Symbols flag which creates two separate packages where one has only content/libraries and the other has only symbols/source.

        In fact, it appears the two commands are somewhat redundant in NuGet 2.8.5 - you can create both packages all at once using the -Symbols flag; or you can create One Big Package With Everything if you omit the -Symbols flag.

        If I publish the One Big Package With Everything then things work.

        That is, if I was going to publish to standard NuGet, I'd do the pack with -Symbols, publish the standard package to NuGet, and publish the symbol package to SymbolSource.

        But if I'm publishing to ProGet, I don't pack with -Symbols, then I publish the package that has everything in it all at once to ProGet. ProGet will then do the separation of symbols and standard package contents for me... and the content files will be present.

        Somewhat non-standard and totally not clear, but at least I figured it out.

        1 Reply Last reply Reply Quote 0
        • ? This user is from outside of this forum
          Guest
          last edited by

          The reason it disappears is documented here: Symbol and Source Server

          We had considered the case where users would upload both packages and attempt to automatically merge them into a single one, but we have found that it would be extremely difficult if not impossible to do this automatically considering you can put anything into a nuget package.

          If you want the exact same behavior as the nuget.org/symbolsource.org combination, either:

          • simply add another ProGet feed (i.e. Default-Symbols) and push the symbols package to that one, then use that in the Visual Studio configuration.
          • -or- pack one big package with all the files in it and only upload that one
          1 Reply Last reply Reply Quote 0
          • ? This user is from outside of this forum
            Guest
            last edited by

            It would be good to clarify the "Symbol and Source Server" document you linked to explain that you don't actually just want to push the symbols package; you want to push a package that contains everything.

            The way the document currently reads, which is why I got hung up, is that it talks about the two different packages - non-symbols vs. symbols - and then later says to only push the symbol package which is wrong. Symbol packages built with -Symbols don't include content files. I recognize the race condition issue, but the description that symbols packages only differ by adding symbols and source is incorrect. The typical symbol package only has symbols and source.

            1 Reply Last reply Reply Quote 0

            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

            With your input, this post could be even better 💗

            Register Login
            • 1 / 1
            • First post
              Last post
            Inedo Website Home • Support Home • Code of Conduct • Forums Guide • Documentation