webForumDet fria alternativet

skapa strong name assembly & GAC

.NET

9 svar · 526 visningar · startad av hopparn

Medlem sedan nov. 20011 551 inlägg
Frågan#1

Hej, jag försöker skapa ett strong name assembly på en dll som jag behöver använda i GAC:en. Jag försöker med Al.exe i vs egen cmd, men får inte till det, jag vet antagligen inte hur jag skall skriva korrekt för att få den rätt.

Jag har skapat en snk fil med sn -k keypair.snk

sen försöker jag skriva nåt liknande:
al /out:c:\i<sökväg>\cebygg.dll <här vet jag inte vad som skall skrivas riktigt men försökte med sökväg utan resultat> /keyfile:c:\keytest\keypair.snk

a little help please :r

Medlem sedan okt. 20041 556 inlägg
#2

OT

OT: Ursäkta inget ont om hopparn, men jag måste bara få kommentera:

hopparn skrev:

...strong name assembly på en dll som jag behöver använda i GAC:en. Jag försöker med Al.exe i vs egen cmd...
...
Jag har skapat en snk fil med sn -k keypair.snk

...snacka om fikonspråk.
Tänk er 82åriga Agda läsa denna mening. :e

Medlem sedan jan. 2004501 inlägg
#3

Ehum...jag har haft lite problem med strong named assemblys. Men jag upptäckte att om man användrer tredje part komponenter så kan man lika gärna lägga ner. :)

Medlem sedan nov. 20011 551 inlägg
#4

Travoni: vad skulle 82 åriga agda göra i asp.net forat? ;) (men såhär i efterhand ser det rätt miffo ut *asg* )

asmodie: såhär ligger det till: Vi har utvecklat ett antal sk onlinetjänster som finns på vår site. Dessa onlinetjänster är skapade som klassbibliotek med ascx kontroller som bindande medel :), detta för att vi skall kunna releasa och uppdatera dessa utan att störa driften på övriga siten. Nu har vi fått uppdraget att tillhandahålla samma tjänster på en annan site (oxå vår men med annat innehåll) som ligger på samma server, därav att jag försöker få tjänstens dll tillgänglig för flera :). Men jag måste säga att det verkar supermeckigt med GAC:en, det får kanske bli så att jag kör samma dll i två kopior i resp binmapp i stället... jag ger det en förmiddag till sen j-ar :)

Medlem sedan maj 20012 812 inlägg
#5

Hopparen: Använder du VS.NET eller något annat program?

Om du använder VS.NET är det riktigt enkelt att få till det, så fall gör du följande:

1. Skapar en nyckel med snk (som du har gjort)
2. I din Assembly fil så skriver du följande:
[assembly: AssemblyKeyFile(@"[sökväg och namn på din nyckel fil]")]
3. På properties för ditt projekt så väljer du: Build Events -> 'Post-build Event Command Line' där i skriver du följande: call C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\gacutil.exe -i "$(TargetPath)"

Nu kan du bygga din dll och vips så finns den i gacen om builden har gått bra, det kan dock vara smidigt att se till så att versionnummret inte ändras varje gång annars så kommer det sluta med att du har massor med olika versioner av din dll i gacen.

- M

Medlem sedan nov. 20011 551 inlägg
#6

aha, det ser intressant ut :)
Nu strular det till sig lite mha min miljö och projektet.

Detta är ett klassbibliotek bredvid 5 andra i samma solution. De har referenser till varandra i viss mån och då jag lägger in keyfile i assembly och kompilerar får jag följande:
Assembly generation failed -- Referenced assembly 'CEByggServer' does not have a strong name
+ 4 st till på 4 andra dll:er som är refererade. MÅSTE de oxå ha strong name för att detta skall funka?

i min postbuild ligger redan en batfil som kopierar in dll:en samt ascx filerna från projektet till siten där det körs, detta har ingen betydelse va?

skall jag kasta dll:en från binkatalogen när den ligger i gac:en?

många frågor men detta är helt nytt för mig :)

Medlem sedan maj 20012 812 inlägg
#7

MÅSTE de oxå ha strong name för att detta skall funka?

Japp. Alla dina dll:er måste vara strong named. Har för mig att du kan sätta ett attribute på din första dll, att den skall tilllåta att bli kallad från dll som inte har strongnamed, men det finns ingen anledning att inte sätta strongnamen på sina dll...

i min postbuild ligger redan en batfil som kopierar in dll:en samt ascx filerna från projektet till siten där det körs, detta har ingen betydelse va?

skall jag kasta dll:en från binkatalogen när den ligger i gac:en?

Har för mig att din application alltid först tittar i din bin katalog, och om den inte hittar den dll som den söker där, så kommer den leta efter den i GAC:en. Så det betyder att om du har en dll i din bin katalog, så kommer den användas och inte den i GAC:en. Dock inget som jag forskat i, bara för mig att jag läst det någonstans :)

- M

Medlem sedan nov. 20011 551 inlägg
#8

ok tack. Jag har en hel hög dll:er som jobbar på olika platser och refererar varandra lite överallt (lite överdrivet men...)

Ser du något problem med att jag skapar strong names på alla? Och hur skriver jag för att ge dem samma version hela tiden som du nämde ovan?

mvh
Patrick

Medlem sedan maj 20012 812 inlägg
#9

Ser du något problem med att jag skapar strong names på alla?

Nope, att bara skapa strongnamned på assembly har ingen som helst inverkan... Mer än att någon dll som använder den kan få problem om inte den är stronged namned, men om du gör ALLA dll/assembly strong namned så finns inga problem.

Och hur skriver jag för att ge dem samma version hela tiden som du nämde ovan?

I din assebmly.cs fil finns följande attribute:

[assembly: AssemblyVersion("1.0.0.1")]

Där kan du sätta ett fast versions nummer så att det inte ändras varje gång du bygger. MEN TÄNK DIG FÖR!!!

Du måste byta versionsnummer när du väl flyttar filen från din utvecklingsmaskin, upp i din test/demo/qa/produktions miljö, eftersom du annars kommer få problem med andra program som använder en befintlig version av din dll. Om du då har ändrat i din nya fil utan att ändra versionsnummret så kommer den befintligt filen att skrivas över i GAC:en och om du har ändrat något vitalt i filen så kommer du få problem med befintliga program.

Så mitt råd är att börja använda dig av Interface för att definerar upp dina gränssnitt för klasserna och använda instancer av interfacet i din kod istället för en instance av klassen direkt. Det kommer göra versionshanteringen lite lättare...

- M

Medlem sedan nov. 20011 551 inlägg
#10

tackar så mycket, återkommer kanske om jag har fler frågor :)

258 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)