от
Я пытаюсь сделать сборку экспортируемых типов. но когда я в кал свойство сборки загружается в основной домен приложения. Блокировка файла ДЛЛ. Мне нужно постоянно перезаряжать сборки, вот почему я продолжаю ceating домена только для этой сборки. Я могу удалить AppDomain и dll файл просто отлично. Но если я пытаюсь получить exportedTypes из сборки эта сборка попадет в основной домен приложения. Как я могу получить типы из этой сборки, не загружая его в основной домен приложения?
    [Serializable]
    public class Facade : MarshalByRefObject
    {
        Assembly assembly;

        public void LoadAssembly(string path)
        {
            assembly = Assembly.Load(System.IO.File.ReadAllBytes(path));
        }

        public Type[] GetTypes()
        {
            return assembly.ExportedTypes;
        }
    }

    [Serializable]
    public sealed class Isolated : IDisposable where T : MarshalByRefObject
    {
        private AppDomain _domain;
        private T _value;

        public Isolated()
        {
            string startupPath = System.IO.Path.GetDirectoryName ( Assembly.GetExecutingAssembly().Location );
            string cachePath =  System.IO.Path.Combine (startupPath, "ShadowCache");
            string binPath =  System.IO.Path.Combine (startupPath, "Bin");
            string dirPath =  System.IO.Path.Combine (startupPath, "Temp");

            AppDomainSetup setup = new AppDomainSetup();
            setup.ApplicationName = "Assembly";
            setup.ApplicationBase = Environment.CurrentDirectory;
            setup.ShadowCopyFiles = true.ToString();
            setup.CachePath = cachePath;
            setup.PrivateBinPath = binPath;
            setup.ShadowCopyDirectories = dirPath;
            setup.LoaderOptimization = LoaderOptimization.MultiDomainHost;

            _domain = AppDomain.CreateDomain("Isolated:"   Guid.NewGuid(), AppDomain.CurrentDomain.Evidence, setup);

            Type type = typeof(T);

            _value = (T)_domain.CreateInstanceAndUnwrap(type.Assembly.FullName, type.FullName);
        }

        public T Value
        {
            get
            {
                return _value;
            }
        }

        public void Dispose()
        {
            if (_domain != null)
            {
                try
                {
                    AppDomain.Unload(_domain);

                    _domain = null;
                }
                catch(Exception e) {
                    DeadEngine.Debug.LogException (e);
                }
            }
        }
    }

            internal CompilerResults Compile()
    {
        if (onCompile != null)
            onCompile (this);

        CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp");
        System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
        parameters.GenerateExecutable = false;
        parameters.OutputAssembly = Environment.CurrentDirectory   "\\Assembly.dll";
        parameters.GenerateInMemory = false;

        List codeCompileUnits = new List ();
        foreach (string project in LoadProjectsInSolution(System.IO.Path.Combine (path, name   ".sln"))) {
            XmlDocument document = new XmlDocument ();
            document.Load (project);

            List refNodes = new List ();
            FindAllNodes (document.FirstChild.ChildNodes, "Reference", refNodes);
            foreach (XmlNode node in refNodes) {
                XmlNode hitpathNode = node.FirstChild;
                parameters.ReferencedAssemblies.Add (hitpathNode.InnerXml);
            }
            List compileNodes = new List ();
            FindAllNodes (document.FirstChild.ChildNodes, "Compile", compileNodes);
            foreach(XmlNode node in compileNodes)
            {
                XmlAttribute pathAttribute = ((XmlElement)node).GetAttributeNode ("Include");
                CodeSnippetCompileUnit t = new CodeSnippetCompileUnit ();
                t.Value = File.ReadAllText (path   "\\"   pathAttribute.Value);
                codeCompileUnits.Add (t);
            }
        }

        CompilerResults results = codeProvider.CompileAssemblyFromDom (parameters, codeCompileUnits.ToArray());

        if (results.Errors.Count == 0) {
            foreach (CompilerError erro in results.Errors)
                Debug.LogError (erro.ErrorText);
        }

        MainClass.isolatedAppDomain = new MainClass.Isolated ();
        MainClass.isolatedAppDomain.Value.LoadAssembly (Environment.CurrentDirectory   "\\Assembly.dll");

        Type[] types = MainClass.isolatedAppDomain.Value.GetTypes ();

        MainClass.isolatedAppDomain.Dispose ();
        File.Delete (Environment.CurrentDirectory   "\\Assembly.dll");

        codeProvider.Dispose ();

        if (onProjectCompiled != null)
            onProjectCompiled (this, results);

        return results;
    }

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
...