Exemplo n.º 1
0
        public void LoadAssemblyNotInCurrentDomain()
        {
            // Ensure that the assembly is not already loaded
            foreach (System.Reflection.Assembly assm in AppDomain.CurrentDomain.GetAssemblies())
            {
                //Dynamic libraries generated dynamically in the process cannot access location - it would throw NotSupportedException
                //for example runtime assemblies Microsoft.GeneratedCode of xml serializers
                if (assm.IsDynamic == false)
                {
                    Assert.IsFalse(assm.Location.Equals(AssemblyPath, StringComparison.CurrentCultureIgnoreCase));
                }
            }
            // We don't even want it in the reflection-only context
            foreach (System.Reflection.Assembly assm in AppDomain.CurrentDomain.ReflectionOnlyGetAssemblies())
            {
                Assert.IsFalse(assm.Location.Equals(AssemblyPath, StringComparison.CurrentCultureIgnoreCase));
            }

            string id        = "MockComponent";
            string classname = "MockComponents.MockComponent"; //class exists and should be loaded
            ComponentMetadataDefinition compMetaDef  = new ComponentMetadataDefinition(id, AssemblyPath, classname);
            ComponentMetadata           compMetadata = new ComponentMetadata(compMetaDef, AppContext.BaseTestDirectory);

            Library.Add(compMetaDef);

            AppDomain testComponentsAppDomain = (new TraceLab.Core.Components.LibraryHelper(AppContext.WorkspaceInstance.TypeDirectories)).CreateDomain(id, true);

            try
            {
                Library.LoadComponent(compMetadata, CreateWorkspaceWrapper(compMetadata), null, testComponentsAppDomain);

                // Ensure that the assembly did not get loaded into the current application domain.
                foreach (System.Reflection.Assembly assm in AppDomain.CurrentDomain.GetAssemblies())
                {
                    //Dynamic libraries generated dynamically in the process cannot access location - it would throw NotSupportedException
                    //for example runtime assemblies Microsoft.GeneratedCode of xml serializers
                    if (assm.IsDynamic == false)
                    {
                        Assert.IsFalse(assm.Location.Equals(AssemblyPath, StringComparison.CurrentCultureIgnoreCase));
                    }
                }
                // We don't even want it in the reflection-only context
                foreach (System.Reflection.Assembly assm in AppDomain.CurrentDomain.ReflectionOnlyGetAssemblies())
                {
                    Assert.IsFalse(assm.Location.Equals(AssemblyPath, StringComparison.CurrentCultureIgnoreCase));
                }
            }
            finally
            {
                LibraryHelper.DestroyDomain(testComponentsAppDomain);
            }
        }
Exemplo n.º 2
0
        public void LoadComponentClassLoaded()
        {
            string id        = "MockComponent";
            string classname = "MockComponents.MockComponent"; //class exists and should be loaded
            ComponentMetadataDefinition compMetaDef  = new ComponentMetadataDefinition(id, AssemblyPath, classname);
            ComponentMetadata           compMetadata = new ComponentMetadata(compMetaDef, AppContext.BaseTestDirectory);

            Library.Add(compMetaDef);

            AppDomain testComponentsAppDomain = (new TraceLab.Core.Components.LibraryHelper(AppContext.WorkspaceInstance.TypeDirectories)).CreateDomain(id, true);

            try
            {
                Library.LoadComponent(compMetadata, CreateWorkspaceWrapper(compMetadata), null, testComponentsAppDomain);
            }
            finally
            {
                LibraryHelper.DestroyDomain(testComponentsAppDomain);
            }
        }