Hello Peter,
I use that same code to read assembly settings and found it best to use
the Assembly.Location property. I use the following code with both .NET
and mono:
string cfgFile = asm.Location + ".config";
const string nodeName = "appSettings";
Note that I also changed the node name from assemblySettings to the
standard appSettings. I know this is semantically incorrect as the DLL
is not the "app", but it makes interchanging config files a lot easier
and editing is less error-prone.
Best regards,
Helge
Bradley, Peter schrieb am 07.02.2006 12:06:
Hi,
I’ve tried to post on this before, but never managed to get below the
size limit. So this is a change of tactic J
The problem is that I would like to keep the connection string for the
application’s db connectivity in a configuration file instead of hard
coding it. However, since I’m making the db connection from a dll
rather than an exe file I can’t use a normal App.config file. What I
would like to do is to use the AssemblySettings class that can be
found at:
http://www.bearcanyon.com/dotnet/#AssemblySettings
This allows the settings to be accessed like this:
// AssemblySettings usage:
//
// If you know the keys you're after, the following is probably
// the most convenient:
//
// AssemblySettings settings = new AssemblySettings();
// string someSetting1 = settings["someKey1"];
// string someSetting2 = settings["someKey2"];
This works in .NET on Windows, but not in Mono on Linux. When I deploy
the project to my Linux server and try to run the db connectivity
code, I get an error saying that the table cannot be read. I’m certain
this is because the connection string is not being read from the
config file because if I hard code the connection string into the
program instead of calling AssemblySettings, everything works just
fine. In other words, I think the config file is not found under Mono.
Looking at the AssemblySettings code, I think the problem is here:
public static IDictionary GetConfig( Assembly asm )
{
// Open and parse configuration file for specified
// assembly, returning collection to caller for future
// use outside of this class.
//
try
{
string cfgFile = asm.CodeBase + ".config";
const string nodeName = "assemblySettings";
XmlDocument doc = new XmlDocument();
doc.Load(new XmlTextReader(cfgFile));
XmlNodeList nodes = doc.GetElementsByTagName(nodeName);
foreach( XmlNode node in nodes )
{
if( node.LocalName == nodeName )
{
DictionarySectionHandler handler = new DictionarySectionHandler();
return (IDictionary)handler.Create(null, null, node);
}
}
}
catch (Exception ex)
{
string s = ex.Message;
}
return(null);
}
In Windows, the variable cfgFile is set to (for example)
MyAssembly.dll.config and then the XmlTextReader object reads the XML
file (the config file) in the folder of the dll’s calling assembly,
which would be the folder of the executable assembly that links to the
dll, under normal circumstances (assuming the assembly is not in the
GAC). I don’t plan to put the assembly in the GAC.
Is it possible that Mono is looking in a different place? Is there
some code I need to add to ensure that Mono will look in some specific
place?
Many thanks
Peter
------------------------------------------------------------------------
_______________________________________________
Mono-list maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-list
_______________________________________________
Mono-list maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-list