Inheritance: MarshalByRefObject
Esempio n. 1
0
        public void bug78465()
        {
            string assemblyFileName = Path.Combine(
                Path.GetTempPath(), "bug78465.dll");

            try {
                AssemblyName assemblyName = new AssemblyName();
                assemblyName.Name = "bug78465";

                AssemblyBuilder ab = AppDomain.CurrentDomain
                                     .DefineDynamicAssembly(assemblyName,
                                                            AssemblyBuilderAccess.Save,
                                                            Path.GetDirectoryName(assemblyFileName),
                                                            AppDomain.CurrentDomain.Evidence);
                ab.Save(Path.GetFileName(assemblyFileName));

                using (FileStream fs = File.OpenRead(assemblyFileName)) {
                    byte[] buffer = new byte[fs.Length];
                    fs.Read(buffer, 0, buffer.Length);
                    Assembly assembly = Assembly.Load(buffer);
                    Assert.AreEqual(string.Empty, assembly.Location, "#1");
                    fs.Close();
                }

                AppDomain         testDomain        = CreateTestDomain(AppDomain.CurrentDomain.BaseDirectory, false);
                CrossDomainTester crossDomainTester = CreateCrossDomainTester(testDomain);
                try {
                    crossDomainTester.bug78465(assemblyFileName);
                } finally {
                    AppDomain.Unload(testDomain);
                }
            } finally {
                File.Delete(assemblyFileName);
            }
        }
Esempio n. 2
0
        public void CompileFromDomBatch_NotInMemory()
        {
            // create a file in temp directory to ensure that compiler is not removing
            // too much (temporary) files
            string tempFile = Path.Combine(_tempDir, "file." + _codeProvider.FileExtension);

            using (FileStream fs = File.Create(tempFile)) {
                fs.Close();
            }

            // compile and verify result in separate appdomain to avoid file locks
            AppDomain         testDomain    = CreateTestDomain();
            CrossDomainTester compileTester = CreateCrossDomainTester(testDomain);

            string outputAssembly = null;

            try {
                outputAssembly = compileTester.CompileAssemblyFromDomBatch(_tempDir);
            } finally {
                AppDomain.Unload(testDomain);
            }

            // there should be two files in temp dir: temp file and output assembly
            string[] tempFiles = Directory.GetFiles(_tempDir);
            Assert.AreEqual(2, tempFiles.Length, "#1");
            Assert.IsTrue(File.Exists(outputAssembly), "#2");
            Assert.IsTrue(File.Exists(tempFile), "#3");
        }
        public void Load_Culture_Mismatch()
        {
            string tempDir = Path.Combine(Path.GetTempPath(),
                                          "MonoTests.System.Reflection.AssemblyTest");
            string cultureTempDir = Path.Combine(tempDir, "en-US");

            if (!Directory.Exists(cultureTempDir))
            {
                Directory.CreateDirectory(cultureTempDir);
            }

            AppDomain ad = CreateTestDomain(tempDir, true);

            try
            {
                CrossDomainTester cdt = CreateCrossDomainTester(ad);

                // PART A

                AssemblyName aname = new AssemblyName();
                aname.Name        = "bug79712a";
                aname.CultureInfo = new CultureInfo("nl-BE");
                cdt.GenerateAssembly(aname, Path.Combine(tempDir, "bug79712a.dll"));

                aname             = new AssemblyName();
                aname.Name        = "bug79712a";
                aname.CultureInfo = CultureInfo.InvariantCulture;
#if NET_2_0
                Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#A1");
#else
                Assert.IsTrue(cdt.AssertFileLoadException(aname), "#A2");
#endif

                // PART B

                aname             = new AssemblyName();
                aname.Name        = "bug79712b";
                aname.CultureInfo = new CultureInfo("nl-BE");
                cdt.GenerateAssembly(aname, Path.Combine(tempDir, "en-US/bug79712b.dll"));

                aname             = new AssemblyName();
                aname.Name        = "bug79712b";
                aname.CultureInfo = new CultureInfo("en-US");
#if NET_2_0
                Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#B1");
#else
                Assert.IsTrue(cdt.AssertFileLoadException(aname), "#B2");
#endif
            }
            finally
            {
                AppDomain.Unload(ad);
                if (Directory.Exists(tempDir))
                {
                    Directory.Delete(tempDir, true);
                }
            }
        }
        [Test] // bug #79715
        public void Load_PartialVersion()
        {
            string tempDir = Path.Combine(Path.GetTempPath(),
                                          "MonoTests.System.Reflection.AssemblyTest");

            if (!Directory.Exists(tempDir))
            {
                Directory.CreateDirectory(tempDir);
            }

            AppDomain ad = CreateTestDomain(tempDir, true);

            try
            {
                CrossDomainTester cdt = CreateCrossDomainTester(ad);

                AssemblyName aname = new AssemblyName();
                aname.Name    = "bug79715";
                aname.Version = new Version(1, 2, 3, 4);
                cdt.GenerateAssembly(aname, Path.Combine(tempDir, "bug79715.dll"));

                aname         = new AssemblyName();
                aname.Name    = "bug79715";
                aname.Version = new Version(1, 2);
                Assert.IsTrue(cdt.AssertLoad(aname), "#A1");
                Assert.IsTrue(cdt.AssertLoad(aname.FullName), "#A2");

                aname         = new AssemblyName();
                aname.Name    = "bug79715";
                aname.Version = new Version(1, 2, 3);
                Assert.IsTrue(cdt.AssertLoad(aname), "#B1");
                Assert.IsTrue(cdt.AssertLoad(aname.FullName), "#B2");

                aname         = new AssemblyName();
                aname.Name    = "bug79715";
                aname.Version = new Version(1, 2, 3, 4);
                Assert.IsTrue(cdt.AssertLoad(aname), "#C1");
                Assert.IsTrue(cdt.AssertLoad(aname.FullName), "#C2");
            }
            finally
            {
                AppDomain.Unload(ad);
                if (Directory.Exists(tempDir))
                {
                    Directory.Delete(tempDir, true);
                }
            }
        }
Esempio n. 5
0
        public void bug78464()
        {
            string assemblyFileName = Path.Combine(
                Path.GetTempPath(), "bug78464.dll");

            try {
                // execute test in separate appdomain to allow assembly to be unloaded
                AppDomain         testDomain        = CreateTestDomain(AppDomain.CurrentDomain.BaseDirectory, false);
                CrossDomainTester crossDomainTester = CreateCrossDomainTester(testDomain);
                try {
                    crossDomainTester.bug78464(assemblyFileName);
                } finally {
                    AppDomain.Unload(testDomain);
                }
            } finally {
                File.Delete(assemblyFileName);
            }
        }
Esempio n. 6
0
        [Category("NotWorking")]          // patch for bug #79720 must be committed first
        public void Load_Culture()
        {
            string tempDir = Path.Combine(Path.GetTempPath(),
                                          "MonoTests.System.Reflection.AssemblyTest");
            string cultureTempDir = Path.Combine(tempDir, "nl-BE");

            if (!Directory.Exists(cultureTempDir))
            {
                Directory.CreateDirectory(cultureTempDir);
            }
            cultureTempDir = Path.Combine(tempDir, "en-US");
            if (!Directory.Exists(cultureTempDir))
            {
                Directory.CreateDirectory(cultureTempDir);
            }


            AppDomain ad = CreateTestDomain(tempDir, true);

            try {
                CrossDomainTester cdt = CreateCrossDomainTester(ad);

                // PART A

                AssemblyName aname = new AssemblyName();
                aname.Name = "culturea";
                cdt.GenerateAssembly(aname, Path.Combine(tempDir, "culturea.dll"));

                aname      = new AssemblyName();
                aname.Name = "culturea";
                Assert.IsTrue(cdt.AssertLoad(aname), "#A1");

                aname             = new AssemblyName();
                aname.Name        = "culturea";
                aname.CultureInfo = new CultureInfo("nl-BE");
                Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#A2");

                aname             = new AssemblyName();
                aname.Name        = "culturea";
                aname.CultureInfo = CultureInfo.InvariantCulture;
                Assert.IsTrue(cdt.AssertLoad(aname), "#A3");

                // PART B

                aname             = new AssemblyName();
                aname.Name        = "cultureb";
                aname.CultureInfo = new CultureInfo("nl-BE");
                cdt.GenerateAssembly(aname, Path.Combine(tempDir, "cultureb.dll"));

                aname             = new AssemblyName();
                aname.Name        = "cultureb";
                aname.CultureInfo = new CultureInfo("nl-BE");
                Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#B1");

                aname      = new AssemblyName();
                aname.Name = "cultureb";
                Assert.IsTrue(cdt.AssertLoad(aname), "#B2");

                aname             = new AssemblyName();
                aname.Name        = "cultureb";
                aname.CultureInfo = new CultureInfo("en-US");
                Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#B3");

                // PART C

                aname             = new AssemblyName();
                aname.Name        = "culturec";
                aname.CultureInfo = new CultureInfo("nl-BE");
                cdt.GenerateAssembly(aname, Path.Combine(tempDir, "nl-BE/culturec.dll"));

                aname             = new AssemblyName();
                aname.Name        = "culturec";
                aname.CultureInfo = new CultureInfo("nl-BE");
                Assert.IsTrue(cdt.AssertLoad(aname), "#C1");

                aname      = new AssemblyName();
                aname.Name = "culturec";
                Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#C2");

                aname             = new AssemblyName();
                aname.Name        = "culturec";
                aname.CultureInfo = CultureInfo.InvariantCulture;
                Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#C3");

                // PART D

                aname             = new AssemblyName();
                aname.Name        = "cultured";
                aname.CultureInfo = new CultureInfo("nl-BE");
                cdt.GenerateAssembly(aname, Path.Combine(tempDir, "en-US/cultured.dll"));

                aname             = new AssemblyName();
                aname.Name        = "cultured";
                aname.CultureInfo = new CultureInfo("nl-BE");
                Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#D1");

                aname      = new AssemblyName();
                aname.Name = "cultured";
                Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#D2");

                aname             = new AssemblyName();
                aname.Name        = "cultured";
                aname.CultureInfo = CultureInfo.InvariantCulture;
                Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#D3");
            } finally {
                AppDomain.Unload(ad);
                if (Directory.Exists(tempDir))
                {
                    Directory.Delete(tempDir, true);
                }
            }
        }
Esempio n. 7
0
        public void bug78468()
        {
            string assemblyFileNameA = Path.Combine(Path.GetTempPath(),
                                                    "bug78468a.dll");
            string resourceFileName = Path.Combine(Path.GetTempPath(),
                                                   "readme.txt");

            using (StreamWriter sw = File.CreateText(resourceFileName)) {
                sw.WriteLine("FOO");
                sw.Close();
            }

            try {
                AssemblyName assemblyName = new AssemblyName();
                assemblyName.Name = "bug78468a";

                AssemblyBuilder ab = AppDomain.CurrentDomain
                                     .DefineDynamicAssembly(assemblyName,
                                                            AssemblyBuilderAccess.Save,
                                                            Path.GetTempPath(),
                                                            AppDomain.CurrentDomain.Evidence);
                ab.AddResourceFile("read", "readme.txt");
                ab.Save(Path.GetFileName(assemblyFileNameA));

                Assembly assembly;

                using (FileStream fs = File.OpenRead(assemblyFileNameA)) {
                    byte[] buffer = new byte[fs.Length];
                    fs.Read(buffer, 0, buffer.Length);
                    assembly = Assembly.Load(buffer);
                    fs.Close();
                }

                Assert.AreEqual(string.Empty, assembly.Location, "#A1");
                string[] resNames = assembly.GetManifestResourceNames();
                Assert.IsNotNull(resNames, "#A2");
                Assert.AreEqual(1, resNames.Length, "#A3");
                Assert.AreEqual("read", resNames[0], "#A4");
                ManifestResourceInfo resInfo = assembly.GetManifestResourceInfo("read");
                Assert.IsNotNull(resInfo, "#A5");
                Assert.AreEqual("readme.txt", resInfo.FileName, "#A6");
                Assert.IsNull(resInfo.ReferencedAssembly, "#A7");
                Assert.AreEqual((ResourceLocation)0, resInfo.ResourceLocation, "#A8");
                try {
                    assembly.GetManifestResourceStream("read");
                    Assert.Fail("#A9");
                } catch (FileNotFoundException) {
                }
                try {
                    assembly.GetFile("readme.txt");
                    Assert.Fail("#A10");
                } catch (FileNotFoundException) {
                }

                string assemblyFileNameB = Path.Combine(Path.GetTempPath(),
                                                        "bug78468b.dll");

                AppDomain         testDomain        = CreateTestDomain(AppDomain.CurrentDomain.BaseDirectory, false);
                CrossDomainTester crossDomainTester = CreateCrossDomainTester(testDomain);
                try {
                    crossDomainTester.bug78468(assemblyFileNameB);
                } finally {
                    AppDomain.Unload(testDomain);
                    File.Delete(assemblyFileNameB);
                }
            } finally {
                File.Delete(assemblyFileNameA);
                File.Delete(resourceFileName);
            }
        }