Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[C#] Assembly-object naar .dll schrijven

Pagina: 1
Acties:

  • Bananenplant
  • Registratie: Januari 2001
  • Laatst online: 12:44
Ik ben bezig met een applicatie waarin in het geheugen door CSharpCodeProvider een Assembly-object gegenereerd wordt. Wat ik nu wil doen is deze assembly opslaan in een file. Ik heb al gezien dat Assembly een statische methode heeft waarmee je vanuit een .dll een nieuw Assembly-object kunt lezen, dus ik dacht dat het wegschrijven van een Assembly-object naar een .dll ook niet zo moeilijk zou moeten zijn.

Maar dat valt tegen. Assembly heeft blijkbaar geen methode om te saven. Ik heb al wel gezien dat er een klasse AssemblyBuilder is en dat die van Assembly erft. Deze klasse heeft wél een save-methode, maar ik mag m'n Assembly-object er niet naar casten.

Ik heb al een boel gezocht en gelezen en hetgene dat het dichtste bij kwam staat hier (laatste 2 posts van onderen). Maar bij mij lijkt dit niet te werken. Ik krijg namelijk hetzelfde gedrag als wat de poster daar omschrijft: een lege .dll waar ook niks in zit als ik die met de reflector bekijk. Wat hij doet:

C#:
1
2
3
4
5
6
FileInfo fi = new FileInfo(filepath);
AppDomain currentDom = Thread.GetDomain();
AssemblyBuilder assBuilder;
assBuilder = currentDom.DefineDynamicAssembly(inMemoryAssembly.GetName(),
             AssemblyBuilderAccess.Save, fi.DirectoryName);
assBuilder.Save(fi.Name);


Hij plaatst later de opmerking dat hij "parameters.outputAssembly('path')" mist, maar ik begrijp niet helemaal wat hij ermee bedoelt en hoe ik dit in mijn geval zou moeten doen.

Ik vind het überhaupt een wat vage constructie die er staat. Het enige argument dat echt over de assembly gaat is namelijk het opvragen van zijn naam :? ...? Ik hoop dat iemand me hiermee verder kan helpen...

💶 Wil je in een vrije democratie blijven wonen? Betaal dan voor nieuws. 📰
❌ ceterum censeo contra factiones ad dextrum extremum esse pugnandum. 🙅🏻‍♂️


  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 12:18

Sebazzz

3dp

Is dat niet logisch dat dat niet kan, je zou dan immers een C# compiler moeten hebben?

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • CodeIT
  • Registratie: Juni 2002
  • Laatst online: 12:20

CodeIT

Code IT

Op MSDN staat een uitgebreid voorbeeld over de AssemblyBuilder: http://msdn.microsoft.com/en-us/library/8zwdfdeh.aspx
Wat mij opvalt is de call naar "SetEntryPoint".

  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Ik weet niet of het voor jouw mogelijk is maar je zou bij de compiler options al de outputfile kunnen opgeven

C#:
1
2
CompilerParameters parameters = new CompilerParameters();
parameters.OutputAssembly = @"C:\bla.dll";

Skill is when luck becomes a habit.


  • Bananenplant
  • Registratie: Januari 2001
  • Laatst online: 12:44
eek schreef op donderdag 28 augustus 2008 @ 13:33:
Ik weet niet of het voor jouw mogelijk is maar je zou bij de compiler options al de outputfile kunnen opgeven

C#:
1
2
CompilerParameters parameters = new CompilerParameters();
parameters.OutputAssembly = @"C:\bla.dll";
Joh, dat werkt ook nog :D ! Ik had die parameter inderdaad wel gezien, maar ik zag dat-ie al wel standaard een waarde en dus een filenaam had. Ik ging er dus vanuit dat hij sowieso die file genereerde en vervolgens weer verwijderde, maar ik vond het op zich al wel vreemd dat ik in die directory telkens geen .dll kon vinden, ookal stapte ik met F10 door m'n code heen... 8)7 .

Hey, maar bedankt :) !

💶 Wil je in een vrije democratie blijven wonen? Betaal dan voor nieuws. 📰
❌ ceterum censeo contra factiones ad dextrum extremum esse pugnandum. 🙅🏻‍♂️