Avatar billede anri Novice
27. marts 2005 - 12:16 Der er 13 kommentarer og
1 løsning

Release dynamiske assemblies

Jeg loader en assembly med funktionen System.Reflection.Assembly.LoadFrom() og når jeg forsøger at lave en
Activator.CreateInstance(type) fejler mit program.. 
Det skal jeg nu nok få løst, MEN...
Mit program frigiver ikke den loadede assembly igen, så jeg skal genstarte min computer HVER GANG jeg skal kompilere den på ny..

Er der ikke noget jeg kan gøre ved det?  Jeg kunne godt tænke mig at lave noget lignende :
try{
  //Lav ting med den loadede assembly
}
catch {
  Assem.Release();
}
Avatar billede arne_v Ekspert
27. marts 2005 - 12:22 #1
Jeg mener at du skal læse den ind i et application domain og rydde hele
applicatiom domain
Avatar billede burningice Nybegynder
27. marts 2005 - 12:22 #2
burde det ikke være nok at sætte dit object du har fået fra Activator.CreateInstance() til null, og kalde GC'en?
Avatar billede burningice Nybegynder
27. marts 2005 - 12:23 #3
arne din slambert... det er påske.. du skal ikke sidde her på eksperten når du kunne være ude og nyde det dejlige vejr :P
Avatar billede arne_v Ekspert
27. marts 2005 - 12:27 #4
o = null;

og GC vil fjerne objektet.

Men jeg har en mistanke om at klasse definitionen er sværere at slippe af med.
Avatar billede burningice Nybegynder
27. marts 2005 - 12:34 #5
ja.. men man kan risikere at der går lidt tid før at handlen rent fysisk er fjernet, derfor mit forslag om at kalde GC'en med det samme.
Avatar billede arne_v Ekspert
27. marts 2005 - 12:36 #6
Som jeg læser spørgsmålet så er det ikke objektet men klasse definitionen han
vil af med.

Fordi der skal loades en ny assembly med en ny klasse med samme navn.
Avatar billede burningice Nybegynder
27. marts 2005 - 12:41 #7
:) okay.. sådan som jeg læser den har han problemer med at hans program bliver ved med at bibeholde en handle til filen så han ikke kan overskrive den ved en ny compiling.
Avatar billede arne_v Ekspert
27. marts 2005 - 12:49 #8
Er det ikke det samme ?
Avatar billede arne_v Ekspert
27. marts 2005 - 13:26 #9
Eksempel:

using System;
using System.Reflection;
using System.CodeDom.Compiler;

using Microsoft.CSharp;

namespace E
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            string code1 = @"
using System;

public class X : MarshalByRefObject
{
    public override string ToString()
    {
        return ""X1"";
    }
}";
            string code2 = @"
using System;

public class X : MarshalByRefObject
{
    public override string ToString()
    {
        return ""X2"";
    }
}";
            ICodeCompiler c = new CSharpCodeProvider().CreateCompiler();
            CompilerParameters cp = new CompilerParameters();
            cp.ReferencedAssemblies.Add("System.dll");
            cp.GenerateInMemory = false;
            cp.OutputAssembly = "X.dll";
            CompilerResults cr1 = c.CompileAssemblyFromSource(cp, code1);
            AppDomain d1 = AppDomain.CreateDomain("Dom1");
            object x1  = d1.CreateInstanceAndUnwrap("X", "X");
            Console.WriteLine(x1);
            AppDomain.Unload(d1);
            CompilerResults cr2 = c.CompileAssemblyFromSource(cp, code2);
            AppDomain d2 = AppDomain.CreateDomain("Dom2");
            object x2  = d2.CreateInstanceAndUnwrap("X", "X");
            Console.WriteLine(x2);
            AppDomain.Unload(d2);
        }
    }
}
Avatar billede burningice Nybegynder
27. marts 2005 - 13:58 #10
og hvis du undlader

AppDoman.Unload(d1);

går jeg ud fra at du ikke kan få lov at compile code2, da filen (x.dll) allerede er i brug?
Avatar billede arne_v Ekspert
27. marts 2005 - 14:01 #11
Lyder meget plausibelt ikke
Avatar billede anri Novice
28. marts 2005 - 20:47 #12
Hold da op, der gik i jo næsten i selvsving, hvilket jeg jo ikke brokker mig over :)
I har ret i at GC'en selv nupper objektet hvis det sættes til null..  Indtil videre er det ikke nødvendigt at kalde GC'en manuelt, så jeg giver mine aftenbønner for dette sprgsmål til cyberfessor.

Mange tak.
Avatar billede burningice Nybegynder
28. marts 2005 - 23:10 #13
hm... well, arne, lader til vores fortolking af spørgsmålet ikke var helt ens alligevel? Selvom jeg udemærket godt kan se din pointe.
Avatar billede arne_v Ekspert
28. marts 2005 - 23:21 #14
Åbenbart selvom jeg ikke rigtigt kan se hvad object=null har med at release
assemblies ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester