My company ships a product that among other things registers SharePoint EventReceiver on SPLists, monitoring for changes. I've been registering it in the GAC where it runs just fine. However, one of our customers has expressed unhappiness with our assembly being installed in the GAC and wishes us to move our binaries to the SharePoint BIN directory and do the other security/trust voodoo that is required for that scenario to work.
When I try to register an event receiver that is not in the GAC, I get the very specific exception whose message reads: "The event receiver assembly is not in the GAC." I interpret this as SharePoint requiring event receivers to be installed in the GAC. Furthermore, I found this on MSDN: http://msdn.microsoft.com/en-us/library/ff407965.aspx: the section "Event Receivers and Handling Events" states
SharePoint Foundation event handlers are a compiled module of custom managed code whose invocation is triggered by a specified event that you have specified. Event handler code is compiled into a .dll file and deployed to the GAC.
This again implies but does not full-out state that the GAC installation is a requirement. Does someone know the answer for this for certain, so I can go back to the customer and explain our GAC requirement?
The followup question is now: if I have an assembly in the GAC, and I "statically link" to other assemblies -- i.e. I don't explictly dynamically load them with Assembly.Load() -- then those other assemblies must also reside in the GAC?