Jag stötte på ett problem av lite filosofisk art. >Hur är det rätta sättet att sköta konfigureringen? Själv är jag nog inne på XML-spåret. Ett förslag som vi har testat men som känns bökigt och kanske inte framtidssäkert är att lägga en xml-fil på samma ställe som dll-filen. I GACen med andra ord. Tyvärr är detta besvärligt eftersom utforskaren döljer den underliggande mappstrukturen. Fördelen med denna lösning är att man får en konfigurationsfil per version av komponenten. Jag förstår att du inte vill rekommendera den lösningen men har du något vettigt alternativ? Först en kommentar:Var lagra konfigurationsinformation för centrala komponenter
När man gör en generell komponent som används av flera applikationer kan det vara bra att lägga den i GACen. Gäller det en komponent som utnyttjar Enterprise Services så hamnar den där - så är det. Ibland vill man att komponenten skall konfigureras - inte per applikation utan per server.
Så till frågan.
Hur är det rätta sättet att sköta konfigureringen?
CO
PS
Jag vill inte nämna de alternativ som togs upp eftersom jag inte vill påverka svaren.
DSSv: Var lagra konfigurationsinformation för centrala komponenter
Som med de flesta filosofiska frågor finns det inget enda "rätt" svar, utan flera möjligheter:
- machine.config
- Nån annan XML fil på lämpligt ställe
- Registret
- En INI fil om du vill vara lite rebellisk och old school
MSSv: Var lagra konfigurationsinformation för centrala komponenter
/COSv: Var lagra konfigurationsinformation för centrala komponenter
>Ett förslag som vi har testat men som känns bökigt och kanske inte framtidssäkert är att lägga en xml-fil på samma ställe som dll-filen. I GACen med andra ord.
Usch, det skulle jag definitivt inte rekommendera.
>Fördelen med denna lösning är att man får en konfigurationsfil per version av komponenten.
Det går väl att ordna på andra sätt.
MSSv: Var lagra konfigurationsinformation för centrala komponenter
Sv: Var lagra konfigurationsinformation för centrala komponenter
Det är väl inte nödvändigt att ligga i GAC för att använda COM+/Enterprise Services, jag gjorde precis en test och det funkade bra utan GAC.
Angående konfigurationen så tycker jag inte iden att lägga en XML fil i en gac-katalog är särskilt bra. Dels så känns det inte riktigt som om man ska in och manipulera denna struktur och dels så måste du iaf peka ut på något sätt var den ligger.
Jag har i ett par olika fall på senaste tiden faktiskt använt registry i liknande fall :-( Fördelen med registry är att det känns enklare att skydda känslig information där, genom ACL. Nu kan man iofs göra samma sak med en fil på NTFS...
En rimlig kompromiss anser jag kan vara att lagra en sökväg till XML fil i registry och sedan läsa in den genom att använda XmlSerializer (se nedan). Koden nedan är något modifierad så det kan ha smugit sig in något litet kod fel.
<code>
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\CompanyName\ComponentName");
string configFileName = (string) key.GetValue("Configuration File");
XmlSerializer serializer = new XmlSerializer(typeof(ComponentConfiguration));
FileStream fs = File.OpenRead(configFileName);
ComponentConfiguration config = (ComponentConfiguration) serializer.Deserialize(fs);
</code>
/Mattias