Third-party libraries, documentation, and the long road to Rome?



  • We're getting ready to start a new project and I've been working on some prerequisites such as finding and installing the required frameworks, figuring out the API of a third-party library we'll have to use to interface with some of our existing server software, and doing some prototyping to get some ideas figured out before we start developing the actual product.

    Our target for this project is a category of devices that won't necessarily have an Internet connection except at certain times. Our vendor provides a "mobile" library which has caching and syncing operations to allow for occasionally-connected clients.

    So, to get started I obviously need to download and install their mobile SDK. Thankfully I found their documentation website for this SDK which seemed pretty detailed. It included a link to the developer requirements which supposedly had installation and download instructions. So I follow the link. There were no download links of any kind, just a very sparse bulleted list on technical requirements. (One requirement which bothered me was Visual Studio 2008 and .NET 3.5 SP1. Everything else we've worked with from this vendor supports Visual Studio 2010--we don't even have a copy of 2008--and the .NET version is relatively unimportant.) I had one of my coworkers log into the site since his account has a bunch of our licenses tied to it, figuring maybe the SDK is only available to certain users. Still no download links.

    I stretched and warmed up and started doing my best Google-fu (and Yahoo-fu and Bing-fu as well just in case) to find the download. Other than a few file-sharing sites of questional legality which I wouldn't touch with a thirty-nine-and-a-half-foot pole from my work PC, everything kept taking me back to this page with no download links. I searched our vendor's web forums and again everything pointed to the same web page. Finally I called our vendor's support line. I talked to five different people within two minutes and eventually got handed off to some Indian guy who wouldn't tell me anything except an occasional "Please hold while I search for the information." Forty-five minutes later I received an email with a link to the SDK download and links to some "Getting Started With Our SDK"-type pages. I clicked the download link and, lo, glorious lights shone forth from heaven and angelic choirs sang magestically...but were abruptly cut off as the page finished loading and I found myself staring at the same page I'd found numerous times over the previous four hours. The page with no download links at all.

    What was that saying about all roads leading to Rome? Except in this case Rome doesn't actually exist. You keep following the roads to Rome, but every time you only find an empty field miles from civilization with no signs that anything had ever been there except for some small rodents and perhaps a bobcat. And apparently you're the only one in the universe who can tell that Rome doesn't actually exist, which makes you question your own sanity and eventually conclude with the (insane) notion that you're perfectly sane and it's the rest of the world that's insane.

    Our next idea was to install our vendor's version of the mobile application (which totally sucks and is why we're doing our own) to my workstation. I dug through the install directory and found several DLL files which appeared to be the vendor's SDK. So I surgically removed them like a shady doctor stealing a kidney and half a liver to sell on the black market. I launched Visual Studio 2010 and created a new WPF project for the .NET 3.5 Framework (remember that VS2008/.NET 3.5 requirement I mentioned earlier?) with those DLLs referenced. And everything worked great. I put a few controls from the vendor's library into a new window just to see stuff in action and had no issues getting them added. Visual Studio recognized the namespace and helped me add a XAML namespace so I could add the controls from XAML. Then I clicked the build button and got crazy errors stating that those types could not be found within the referenced assemblies. I had found Rome despite it not existing and now suddenly everyone was telling me it didn't exist after all.

    One of my coworkers reminded me of the VS2008 requirement and speculated that it wouldn't run at all on VS2010. So over lunch I went digging through my personal files and found an old ISO and license key for VS2008 Professional that I'd gotten years ago for free because I was a student at the time. I threw them on my flash drive and spent the first hour and a half of my afternoon installing this outdated IDE and service packs and letting Windows Update run its course on my system, all slowed down by our WTF corporate antivirus which does a full scan of my system six times per afternoon despite its scheduler claiming it only does one quick scan in the morning. Meanwhile I changed my keyboard layout to Dvorak and took some online typing classes since I was already caught up on all my usual online news and forum sites. Two installers, three system restarts, and four virus scans later (and an improvement to 15 wpm at 90% accuracy using words that only require the home row on Dvorak), it was installed.

    I started VS 2008, created a WPF project for .NET 3.5, and referenced the SDK assemblies. And the project compiled just fine. So I did a compile-and-run, and it compiled but didn't run. I opened the bin directory and manually launched the exe and still nothing happened. I removed the vendor's controls, compiled and ran, and this time I was greeted with the expected blank WPF window. So this library didn't even work? I guess now Rome only existed when I looked away from it.

    At this point I started doing random trial-and-error runs to find something that worked, much like throwing darts at a world map and travelling to that location to see if that's where Rome is. Eventually I discovered and concluded that these DLLs only work on Visual Studio 2010 and .NET 4.0, despite the metadata in the DLLs announcing they required the .NET 2.0 runtime (the .NET 2.0 and 4.0 runtimes are neither forward nor back compatible, and for the pedantic dickweeds out there .NET 3.0 and .NET 3.5 actually run on the .NET 2.0 runtime while .NET 4.0 introduced a brand new and incompatible runtime) and despite all of our vendor's (apparently outdated and/or totally incorrect) documented requirements.

    Now I get to spend the next several months dealing almost exclusively with this SDK and its documentation. Other libraries from this same vendor, while containing a few inevitable WTFs, were at least well-documented and easy to get support for. Hopefully I'm past all the issues and won't have to post more about this SDK.



  • How in the hell did they create a .Net 4 assembly with metadata saying it's targeting .Net 2?  This sounds like some disgruntled developer working feverishly in his basement cubicle to sabotage his last 14 months of work just days before he left the company because they kept moving his office and using his red Swingline...



  • @mott555 said:

    the .NET 2.0 and 4.0 runtimes are neither forward nor back compatible
    What?



  • @mott555 said:

    (the .NET 2.0 and 4.0 runtimes are neither forward nor back compatible ........ NET 4.0 introduced a brand new and incompatible runtime)
    Incompatible with what?  I don't know a lot about .Net,  but I thought one of the alleged features of the .Net framework was that every version is backwards compatible with all previous versions?

     @mott555 said:

    and for the pedantic dickweeds out there .NET 3.0 and .NET 3.5 actually run on the .NET 2.0 runtime
    I don't understand what you mean by this? A few years ago I tried to install some expensive audio editing software form a large well known company (also well known for its WTFs unfortunately) and I was greeted by a message telling me that I have to have .Net 2.0 (or 2.1?).  Despite the fact that I was running Windows Vista at the time, which supposedly shipped with .Net 3.0,  I still had to download and install .Net 2.0.

     

     



  • @El_Heffe said:

    @mott555 said:
    and for the pedantic dickweeds out there .NET 3.0 and .NET 3.5 actually run on the .NET 2.0 runtime
    I don't understand what you mean by this? A few years ago I tried to install some expensive audio editing software form a large well known company (also well known for its WTFs unfortunately) and I was greeted by a message telling me that I have to have .Net 2.0 (or 2.1?).  Despite the fact that I was running Windows Vista at the time, which supposedly shipped with .Net 3.0,  I still had to download and install .Net 2.0.

    There were no additions to MIL from version 2.0 to 3.5.  They were language features only.  If you have a C# 2.0 project, and upgrade it to 3.0/3.5, it could still run in the 2.0 runtime, but you wouldn't be able to compile it without something supported 3.0/3.5.

    As for installing 2.0... wtf... perhaps they were explicitly checking for version 2.0 instead of checking for version 2.0+?



  • Apparently you aren't allowed to use more than one version of .Net at the same time in a process.

    Or at least that is the message I get from all documentation for writing windows shell extensions. (No managed code, period.)



  • Update:

    I dived into the samples for this SDK and followed their "Your First Application" online guide which has one XAML page and about 10 lines of C# code. And it doesn't work. It throws a runtime exception every time. Even better, the exception's message property is an empty string. So it doesn't work and it won't even tell me why. It does give me a stack trace, but it's into the SDK's code so it doesn't mean much to me.



  • @mott555 said:

    Update:

    I dived into the samples for this SDK and followed their "Your First Application" online guide which has one XAML page and about 10 lines of C# code. And it doesn't work. It throws a runtime exception every time. Even better, the exception's message property is an empty string. So it doesn't work and it won't even tell me why. It does give me a stack trace, but it's into the SDK's code so it doesn't mean much to me.

    You're going to escalate this, I'm assuming?  I know you already called, but tell you boss about this, being sure to highlight the time/budget wasted because their product for which you've already paid for doesn't work.

    IMO, this goes beyond unprofessional, especially when consider the fact that you have already spoken with several support people in their company.



  • @henke37 said:

    Apparently you aren't allowed to use more than one version of .Net at the same time in a process.
    This was definitely the case with 1.x and 2 - whichever got loaded first was there to stay. I've read somewhere that 2 and 4 can coexist, but it's not from any official source.



  • @ender said:

    @henke37 said:
    Apparently you aren't allowed to use more than one version of .Net at the same time in a process.
    This was definitely the case with 1.x and 2 - whichever got loaded first was there to stay. I've read somewhere that 2 and 4 can coexist, but it's not from any official source.
    What in the world are you guys doing that you need multiple versions of the CLR loaded at the same time in one process?



  • @Sutherlands said:

    What in the world are you guys doing that you need multiple versions of the CLR loaded at the same time in one process?
    Write a shell extension in .NET?



  • @El_Heffe said:

    @mott555 said:

    (the .NET 2.0 and 4.0 runtimes are neither
    forward nor back compatible ........ NET 4.0 introduced a brand new and
    incompatible runtime)
    Incompatible with what?  I don't know a lot about .Net,  but I thought one of the alleged
    features of the .Net framework was that every version is backwards
    compatible with all previous versions?

    The code is backwards compatible (as in: you can compile everything for .NET 4.0 if it was written for .NET 3.5 or lower) but the runtime certainly is not. There are currently three versions of the runtime/bytecode: .NET 1 (1 and 1.1), .NET 2 (2, 3.0 and 3.5) and .NET 4. So 3.5 can run 2.0, 3.0 and 3.5 code but 4.0 cannot run 2.0 code.

     @mott555 said:

    and for the pedantic dickweeds out there .NET 3.0 and .NET 3.5 actually run on the .NET 2.0 runtime
    I don't understand what you mean by this? A few years ago I tried to install some expensive audio editing software form a large well known company (also well known for its WTFs unfortunately) and I was greeted by a message telling me that I have to have .Net 2.0 (or 2.1?).  Despite the fact that I was running Windows Vista at the time, which supposedly shipped with .Net 3.0,  I still had to download and install .Net 2.0.

     

     

    There were some peculiarities in the default installation of .NET in Vista (well, the whole OS was a "peculiarity" ofc) which might cause this. If the code required 2.0 SP1 it might not have worked with Vista's default .NET 3.0 (but should work with 3.0 SP1 and 3.5)



  • @mott555 said:

    Update:

    I dived into the samples for this SDK and followed their "Your First Application" online guide which has one XAML page and about 10 lines of C# code. And it doesn't work. It throws a runtime exception every time. Even better, the exception's message property is an empty string. So it doesn't work and it won't even tell me why. It does give me a stack trace, but it's into the SDK's code so it doesn't mean much to me.

    You mentioned Mobile? If so, the .NET Compact Framework does not install the necessary localisation strings for, well, any exception at all. You might need to install the .NET CF Error Messages as well.

    And if the exception digs into the SDK's code, can you not dig into it with ILSpy and see what the erroring code is?



  • The next time I get library hell with Java, I'll remember this thread and reassure myself I don't have it so bad.



  • Another update: This project is now on hold and is likely dead. It seems our vendor may have abandoned this SDK but we've been assured they'll have something newer and better out later this year. In the meantime, I get to work on other projects.


  • Discourse touched me in a no-no place

    @mott555 said:

    but we've been assured they'll have something newer and better out later this
    year
    It's only 11 months until the 'total obliteration of everyone'.. Are they supporting it in 2013? Expecting to have something before December? Or hoping the 'mayans' were right?


Log in to reply