Inline...
ice
> When you sign assemblies with a strong name then by default the assemblies
> that reference them require a specific version - this can be a benefit or a
> hindrance, depending on your needs. You can redirect the bindings through
> various means (app config, machine config, hooking the AssemblyResolve
> event, etc) or you can ensure the correct versions are all present when your
> app is run.
One of the reasons why I chose strong name my assemblies is so that I can
use the strong name as a security identifier when using the default smart
client implementation. Are your assemblies strong-named? It would seem to
me that you don't run into security issues with your custom downloader or am
I wrong?
> The approach I took was to ensure the correct version of all assemblies were
> always downloaded to the client machine. I could not use the default
[quoted text clipped - 3 lines]
> not later then it never got downloaded, even if the internal version
> changed. This was unsuitable for our needs.
I'm curious to know how you had a new file with an earlier version? I
understand how it could be done, but what kind of situations prompted this?
> I wrote a small service that returned a list of file names with the versions
> and time-date stamps to the client, and a layer on the client that copied
[quoted text clipped - 59 lines]
> >
> > /* 67d0ebfec70e8db3 */
Dave - 25 Oct 2003 01:48 GMT
inline
> One of the reasons why I chose strong name my assemblies is so that I can
> use the strong name as a security identifier when using the default smart
> client implementation. Are your assemblies strong-named? It would seem to
> me that you don't run into security issues with your custom downloader or am
> I wrong?
All of our assemblies are strong named. We originally used LoadFrom
specifying a remote host which caused the assemblies to be loaded into the
internet or intranet security zone. To increase our permission grant we
created a custom code group using our strong name as the membership
condition and gave our assemblies full trust (at install time). After I
converted the code over to using the custom download we no longer really
needed the custom code group but I decided to leave it in there so that we
could later do things like create a security sandbox that would restrict
third party assemblies but so that our own assemblies would still have full
trust. Strong names also allows us to tightly couple the assemblies so that
only assemblies of the correct version would run together.
> > The approach I took was to ensure the correct version of all assemblies
> were
[quoted text clipped - 8 lines]
> I'm curious to know how you had a new file with an earlier version? I
> understand how it could be done, but what kind of situations prompted this?
The first time it created a problem was when one of our testers loaded up a
later version of the app, tested it, and then decided to go back to an
earlier version. He uninstalled the latest version on the server and then
installed an earlier version. When the client connected to the server the
runtime did not download the earlier version because the time-date stamp was
older then the version that was installed on the client. As soon as some
data objects tried to get exchanged we got loads of exceptions due to the
version mismatch. This was unexpected as we thought the runtime would
always ensure the correct version was loaded...we were wrong.
In actual use I would not expect our customers to run into this often, but
it is still conceivable that a customer could get a newer version to try
out, decide she didn't like it, and try to go back to the previous version.
What it boils down to is that anyone who sets the time-date stamp of a file
could play havoc with the versioning/binding system. As our assemblies are
tightly coupled we need to ensure that the correct versions are always
present.