DISCLAIMER: All discussion regarding upcoming releases of LabVIEW are not commitments that the final product will be as I describe here. It’s merely what we are thinking at the moment or have implemented to date. Of course, if you have any feedback on this, please post it up or contact me. That is part of the reason for these posts.
The thing about engineering is that it's a science of trade-offs. So here is a trade-off that we made regarding weakly and strongly named assemblies.
Refresher: A strongly named assembly is digitally signed. Thus if you look at the full assembly name, the token value is non-null. A weakly named assembly is not signed and thus has no token.
Weakly named assemblies have certain advantages. They are easy to create (although Visual Studio makes it pretty easy to do strongly named also) and don't require versioning policies if you change the version number (although Constellation now handles that automatically). However, they are subject to naming collisions.
For example, in directory A I can have foo.dll with version 1.0.0.0. Then, in directory B I can have foo.dll with version 1.0.0.0 - but from a completely different company.
If you create your application like a good .NET citizen this isn't a problem. You keep the DLLs in the same directory as your EXE (or in a single subdirectory such as bin vis-a-vie ASP.NET). Thus you couldn't have two foo.dll's - their names would collide.
This is why 3rd party distributed applications should ALWAYS be strongly named. But of course, this is the real world...
How does this affect LabVIEW? Since we're trying to make it as easy as possible to develop with LabVIEW, we automatically support loading .NET assemblies from directories other than your application's directory (see all the previous postings about Load vs. LoadFrom...ad nauseum).
So, consider, if you will, the following situation:
Developer X creates a VI (viA) that accesses the foo.dll in directory A. Developer Y creates viB that accesses foo.dll in directory B. Each developer tests their VI and blesses it as good.
Now - you get to play lucky developer Z. Your application is going to use those two VIs. You create your application...you press the run button...and BOOM!
Actually, to be fair, if you are in a development environment we are going to warn you a lot earlier than that. However, either way you have a problem.
The issue is that when LabVIEW loads up viA, it tries to resolve the weakly named foo.dll in directory A. Well, Load() fails so we drop back to LoadFrom(), get the assembly and put it in the Load context. Life is good.
Now you try to load viB. We look at the request - hmmmm. An assembly named foo, in a file called foo.dll, with version 1.0.0.0. Well, hell, we already have that. So we pop up a warning (development environment only) and say that your DLL obviously moved to a different directory since you last opened the VI, but don't worry - we found it in the new location.
Thus all your calls in viB are going to go to the wrong assembly. Most likely you're going to get broken arrows (dev env) or an error in your error cluster.
Why don't we just ignore the fact that we've already loaded the DLL? Even .NET Fusion is going to say they are the same thing. Why? Because they are weakly named and based on all we can see they are the same. Remember - we put the foo.dll into the Load context (this solves a host of other problems...remember my comment about tradeoffs?) so when .NET Fusion is asked about foo, version=1.0.0.0 it is going to say - I've got that already.
The solution to this mess is to use strongly named assemblies. If you have access to the source of those assemblies (which I hope since they are weakly named), you can digitally sign them. This means each gets a unique token that allows both LabVIEW and Fusion to see them as completely separate names.
Moral?
Don't do this.
Okay, something better...hmmm...Make sure any assembly that you're going to reference via a path outside your application is strongly named.
You must? No - I hope you noticed that this is a rather contrived example. It isn't likely which is why we decided to let this be the problem child. However, it can happen so be a boy scout - be prepared.