Archief - .NET één setting voor meerdere projecten

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

MangleR

Legacy Member
Dag programmeurs :),

momenteel ben ik bezig aan een .net programmatje waarin meerdere projecten zitten binnen dezelfde solution. Maar nu wil ik dat er één en dezelfde settings file wordt gebruikt voor deze projecten.
Om een beeld te schetsen van wat er nu juist gebeurt :

er is een project
- Algemeen
- Dataaccess (naar de database)
- statistieken

algemeen en statistieken gebruiken beide de dataaccess laag, maar in mijn Algemeen project kan ik de setting voor de connectionstring aanpassen (die in de DAC setting zit), en in statistieken wil ik ook gebruik maken van de dataaccess laag, maar deze neemt de default settings die standaard opgeslagen zijn en niet de aangepaste die op de gebruiker zijn computer aanwezig is.

is er dus een mogelijkheid dat een volledige solution een en dezelfde settings file gebruikt. of dien je hier een andere oplossing te hanteren?

alvast bedankt.

stelly

Legacy Member
Voor zover ik het snap, zijn er enkele mogelijkheden. De setting file van statistieken aanpassen wanneer die in algemeen wordt aangepast en statistieken de setting file van algemeen laten lezen/schrijven. Of een registry key maken. Of in dataaccess opslaan zodat algemeen en statistieken naar zelfde locatie kunnen kijken.

Een solution is enkel een verzameling van projecten. Buiten de IDE heeft da geen effect.

MangleR

Legacy Member
stelly zei:
Voor zover ik het snap, zijn er enkele mogelijkheden. De setting file van statistieken aanpassen wanneer die in algemeen wordt aangepast en statistieken de setting file van algemeen laten lezen/schrijven. Of een registry key maken. Of in dataaccess opslaan zodat algemeen en statistieken naar zelfde locatie kunnen kijken.

Een solution is enkel een verzameling van projecten. Buiten de IDE heeft da geen effect.

je hebt het deels verstaan :)
statistieken gebruikt geen setting file, maar gaat zijn data ophalen via een klasse in die dataaccess laag en die dataccess gebruikt zijn connectiestring.

maar het is net alsof je het ene project start dat die in zijn eigen settingsfile gaat kijken. maar het zou moeten een globale setting file zijn.

ik weet , 't is wat vreemd uitgelegd maar ik versta er mij ook niet aan. Ik zal, na mijn werk nu, vanavond eens en voorbeeldje programmeren in VS2008 zodat jullie weten wat ik bedoel.

mvg

Duke_Puke

Legacy Member
normaal gebruikt een applicatie toch enkel ofwel de app.config file ofwl de web.config file, afhankelijk van uw opstartpunt, waarin je al u algemene settings kwijt kunt (ik zeg dus niets over custom settings files ofzo)

maar alle projecten die bv vanuit een client omgeving worden gebruikt, gaan steeds dezelfde connectionstring gebruiken uit uw app.config file.

wat wel kan, is dat ge zowel een web.config als een app.config gebruikt, en ge uw DAL achter bv een webservice/WCF service host, en dat uw DAL dus uw connectiestring uit de web.config leest, terwijl da uw statistiek klasse zich aan de clientside bevindt, en ge verwacht dat die uit uw app.config gaat lezen...

Maar tbh, ik versta uw uitleg eigenlijk niet zo heel goed :)

MangleR

Legacy Member
Dit is een zeer klein test opstelling waar het probleem duidelijk zal worden

testSettings.rar

opstelling :
3 projecten, een centrale dataaccess (DAC)
en twee winform projectjes daar rond.

werkwijze:
- open het standaard form die start
- lees eens de string uit, die staat "STANDAARD" verander die nu naar "nieuw" bv
- als je hem dan weer uitleest zie je "nieuw"
- start dan het tweede form op
- lees hier diezelfde string uit, via DAC blabla
- wat zie ik "STANDAARD"

hoe komt het dat ik hier ook niet 'nieuw' zie

dat is eigenlijk mijn probleem.

alvast bedankt!

FrederickDhont

Legacy Member
Ieder opstartbaar project binnen uw solution is een programma welke gebruik zal maken van zijn eigen app.config.

Deze programma's (algemeen en statistieken) maken vermoedelijk gebruik van dataaccess-laag (module zonder visuele gebruikersinterface of console) welke de communicatie verzorgt met de databank. Deze "library" zal automatisch de app.config gebruiken van de applicatie waar deze in gebruikt wordt. (referenced)

Deze library (of assembly) heeft geen eigen app.config aangezien het niet als alleenstaand geheel bruikbaar is.

De enige oplossing die bestaat is om manueel die app.configs in uw beide programma's synchroon te houden

MangleR

Legacy Member
FrederickDhont zei:
Ieder opstartbaar project binnen uw solution is een programma welke gebruik zal maken van zijn eigen app.config.

Deze programma's (algemeen en statistieken) maken vermoedelijk gebruik van dataaccess-laag (module zonder visuele gebruikersinterface of console) welke de communicatie verzorgt met de databank. Deze "library" zal automatisch de app.config gebruiken van de applicatie waar deze in gebruikt wordt. (referenced)

Deze library (of assembly) heeft geen eigen app.config aangezien het niet als alleenstaand geheel bruikbaar is.

De enige oplossing die bestaat is om manueel die app.configs in uw beide programma's synchroon te houden

ahzo, enig idee hoe deze synchroon te houden?

stelly

Legacy Member
Manueel, dingen uit mijn eerste post bijvoorbeeld. Ene oplossing is al viezer als de andere, moet je zelf kijken wat je wilt nemen.

MangleR

Legacy Member
stelly zei:
Manueel, dingen uit mijn eerste post bijvoorbeeld. Ene oplossing is al viezer als de andere, moet je zelf kijken wat je wilt nemen.

het werkt nu,
ik heb het opgelost door de setting die ik nodig had in meerdere projecten in mijn register op te slaan. en deze hier dan ook aan te passen en op te halen.

bedankt!

Duke_Puke

Legacy Member
dat hoeft daarom niet persé uit de registry te komen hé...

je zou ook bv een xml file kunnen gebruiken, en dan bv je eigen settings klasse voor het beheer ervan, erboven schrijven (al dan niet static) en die in je verschillende projecten gebruikt.

Natuurlijk zal je dan wel meer zaken moeten zelf gaan beheren (zoals het uitlezen van connectionstrings en zo)

Tyfius

Legacy Member
Blijf van dat registry af. Dat is niet gemaakt voor zoiets en, uit ervaring weet ik, dat dat alleen maar voor problemen zorgt onder Vista en Windows 7. Zoals Duke_Puke vermelde is een globale static setting manager een betere oplossing.

Obliv`

Legacy Member
Het kan ook allemaal veel simpler hoor, maar dan moet je wel je structuur wat aanpassen:
- maak een class library project met 2 files in, namelijk je App.config en je Program.cs in die Program.cs staat dan je Main method die het juiste startup form launched.
- je andere projecten kunnen blijven zoals ze zijn. Delete gewoon hun App.configs om verwarring te vermijden.

Je zal natuurlijk ook de manier moeten aanpassen waarop je gegevens uit je App.config haalt. Je kan geen gebruik meer maken van de UserSettings en ApplicationSettings die een class genereren zodat je strongly typed gegevens uit je config kan halen en saven. Je andere projecten hebben immers geen reference naar je class library met je app.config in en dus kunnen ze ook de gegenereerde class niet aanspreken. In plaats daarvan haal je de setting op door op de ConfigurationManager.AppSettings["settingName"] op te roepen, op deze manier kan je dus settings uit je app.config halen vanuit eerder wel project.

MangleR

Legacy Member
Obliv` zei:
Het kan ook allemaal veel simpler hoor, maar dan moet je wel je structuur wat aanpassen:
- maak een class library project met 2 files in, namelijk je App.config en je Program.cs in die Program.cs staat dan je Main method die het juiste startup form launched.
- je andere projecten kunnen blijven zoals ze zijn. Delete gewoon hun App.configs om verwarring te vermijden.

Je zal natuurlijk ook de manier moeten aanpassen waarop je gegevens uit je App.config haalt. Je kan geen gebruik meer maken van de UserSettings en ApplicationSettings die een class genereren zodat je strongly typed gegevens uit je config kan halen en saven. Je andere projecten hebben immers geen reference naar je class library met je app.config in en dus kunnen ze ook de gegenereerde class niet aanspreken. In plaats daarvan haal je de setting op door op de ConfigurationManager.AppSettings["settingName"] op te roepen, op deze manier kan je dus settings uit je app.config halen vanuit eerder wel project.

zeer goede oplossing hiervoor
bedankt!!

MangleR

Legacy Member
is het wel mogelijk dat er een Program.cs in die class library staat? Want je kan een class library toch niet 'opstarten'

//heeft er misschien iemand een klein voorbeeld, want nu blijkt hij
"Calling thread must be STA, because many UI components require this"
te geven

Duke_Puke

Legacy Member
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
AppDomain.CurrentDomain.SetPrincipalPolicy(System.Security.Principal.PrincipalPolicy.WindowsPrincipal);

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

if (SecurityHelper.IsAuthorized(Level.Operation, AccesRights.ApplicatieStarten))
{
var mainController = new FrmMainController();
mainController.StartVervoerRapportMain();
}
else
{
MessageBox.Show("U heeft onvoldoende rechten om deze toepassing te gebruiken.", "Geen toegang", MessageBoxButtons.OK);
Application.Exit();
}

}

}

MangleR

Legacy Member
maar visual studio zegt dat hij geen class library kan starten?
da's toch een dll? dat kan je niet starten?

Duke_Puke

Legacy Member
Voor zover ik weet kun je enkel een winforms, console, webservice of website project starten...
Uw program.cs file dient dan ook in één van bovenstaande project types te zitten...

Obliv`

Legacy Member
Verander dat startup project maar van een Class Library naar een WinForms applicatie hoor. Dan compileert hij ipv een dll een exe en dan zal de boel wel werken.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan