How to set up the location of your .NET .config file when you're doing COM+ interop
How to set up the location of your .NET .config file when you're doing COM+ interop
Today I was struggling with trying to get my .NET application to pick up it's config file. I'd tried creating a .config in the same directory as the application dll, but it didn't work. This was because the application in question is activated via COM+ interop using the /codebase setting. (In other words, the COM+ settings in the registry tell the COM+ loader to use the CLR, and additionally specify the location of the assembly DLL for the benefit of the .NET loader.) This means that as far as .NET is concerned, the directory isn't the "base" of the application.
This was a tough problem, and I might have ended up doing one of two ugly things to solve it:
- Creating a %windir%/system32/dllhost.exe.config file
- Adding my configuration settings to machine.config
Either of these would have polluted a much wider area than I'd have liked.
Then I came across a blog entry by Rinat Shagisultanov which gave me sufficient of a clue to find a much better solution. The basic idea is this:
- Configure the application in COM+ (if necessary adding sufficient System.EnterpriseServices goo to make this work)
- Create a directory and point to it from the ApplicationRootDirectory setting of the COM+ application
- Create a .manifest file
Now the CLR will regard that directory as the base of your application, and look there for the config file.
Thanks Rinat.