attribute problem solved (holy poo this is nifty)
if you didn't read the post before this, go read it. ok. here's the fix.
in studio, i had four projects open - my repository/testing area, fyi. a console app (for basic testing), a web app, a windows app, and a library. all c# (duh).
in my library, i have a series of components which aim themselves at attributes located on methods placed throughout an assembly. using the Assembly.LoadFrom(string) overload, i take a snapshot via reflection at every Type within the assembly.
an inner loop of this runs through each method (will be extended to include everything) in the Type and investigates each custom attribute on the method. in essence, it's searching for an attribute of type IssueAttribute. for each of these that is found, its values are used as parameters for an external method. a DataTable representation of the results is returned from the method.
that's your reverse-engineering lecture....
anyhoo, when i executed this app from the aspx project and pointed it to the assembly that had been copied up to the /bin directory, it worked just fine. when i ran the windows app, i used an OpenFileDialog to locate the assembly. the filename i was using was the one that was stored in the aspx apps /bin folder.
on a whim, i ran the client app again and pointed it to the dll that had been stored in the /bin folder of the windows app this time. voila! it worked and executed precisely as i had originally expected.
this is a very interesting behavior i think. seems that the aspx application (i'm totally guessing here, and really want the answer so if you know hook me up) was restrciting access to the internal loop - the process inspecting the type via an as casting (see the code)! when i performed said procedure in the client app, the web app's dll was not - don't know how to put this - "logically registering" or something. is this evidence of app domain security (thinking that the aspx application was still using the original dll and disallowing access to external apps, maybe)?
how does this work? or is it simply something i just failed to pick up along the way?