Jag håller just nu på med flera separata projekt (webbapplikationer) och inser att mycket av koden kommer att vara identisk i de olika projekten. Jag tänkte därför lägga all den gemensamma koden i en egen solution som jag sedan kan återanvända när jag vill. Det handlar alltså om generell kod såsom kommunikation med databaser, serialisering etc...
Detta är ju inget problem i sig, men hur gör jag smidigast för att använda denna kod i de olika projekten? Hur gör ni?
Jag får ju assemblies/dll:er när jag kompilerar denna kod. Just nu så gör jag bara så att jag debuggar och testar koden tills jag anser att den fungerar som den ska. Sedan kopierar jag de dll:er som nu finns i varje projekts (i kodbibliotekets solution) bin/Debug-katalog till en annan extern katalog. Det är sedan till de dll:er som ligger i denna katalog jag refererar till i de projekt som ska utnyttja dessa (de separata webbprojekten i mitt fall).
Det här innebär att jag alltid måste sitta och manuellt kopiera dll:erna varje gång jag ska uppdatera den kod som används av webbprojekten. Å andra sidan så vet jag ju att de dll:er som ligger i denna externa mapp alltid är testade och ok, något jag inte kan vara säker på ifall jag skulle refererat direkt till bin/Debug-katalogerna (vilket inte känns så seriöst heller för den delen).
Är det här ett dumt sätt? Finns det något bättre/smidigare? Hur isåfall?
Jag vet inte vad det finns för best practices kring sånt här, men kan säga hur jag gjort med det Framework som jag jobbat med.
Mappstruktur:
Dev
--Doc
--Lib
--Solutions
--Src
----Incordia.Framework.Cache
----Incordia.Framework.DataAccess
----.....
--Test
Main
--Branch av Dev
Release
--Incordia.Framework.Cache
----1.0
------bin
----1.1
------bin
--Incordia.Framework.DataAccess
----1.0
------bin
1. Kodar i Dev branchen (projekten ligger i Src), fixar till dokumentationen (Doc), lägger 3:e parts dll:er i Lib, test-projekt i Test.
2. När jag är klar så uppdaterar jag versionsnumret.
3. Mergar från Dev-branchen till Main-branchen.
4. Öppnar solutionen i Main.
5. Kompilerar i release läge. Har inställt på projektet att generera XML dokumentation.
6. Skapar upp ny mapp i Release mappen med rätt versionsnummer.
7. Kopierar in dokumentationen för den versionen i mappen.
8. Kopierar dller/XMLer till bin mappen.
9. Genererar API-dokumentationsfil med hjälp av SandCastle och lägger i mappen bredvid den skrivna dokumentationen.
10. Skapar en enkel liten Updates.txt fil som säger kortfattat vad som har ändrats i den nya versionen.
När jag gjort detta så finns den nya releasen tillgänglig för användning.
På det här sättet får man en bra överblick över versionerna.
Och genom att sätta versionsnummer på dllerna så vet man vilken som används i de olika projekten.
Sen kan jag tänka mig att om det bara är för din egen skull så kan man hoppa över flera steg. Branches/Merge kanske inte är så aktuellt, du kanske inte ens har någon source control. Och dokumentation är kanske inte heller så viktig.
Men saker som att kompilera i release läge, sätta versionsnummer och ha en bra struktur kan vara intressantare...
Jag brukar försöka undvika att referera till DLL:er, och istället referera direkt projekten i källkodsform så att jag vet att jag alltid bygger med senaste versionen av koden. Förvisso kan det uppstå integrationsproblem, men mitt antagande är som så att bygger man en ny version beror det på att man lagt till ny/ändrat befintlig funktionalitet, och då måste man testa, och testerna borde då rimligen fånga integrationsproblemen.
Men tills dess finns det en workaround:
Det finns en kryssruta "stäng av smilies" under "Tilläggsalternativ" när du redigerar inlägget i "avancerat läge" (via knappen "Till avancerad")