protected override void Before_all_tests()
        {
            base.Before_all_tests();

            _xapRewriter = new XapRewriter(base.TestLogger);

            var appManifest = @"<Deployment xmlns=""http://schemas.microsoft.com/client/2007/deployment"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" EntryPointAssembly=""StatLight.Client.Harness"" EntryPointType=""StatLight.Client.Harness.App"" RuntimeVersion=""4.0.50826.0"">
              <Deployment.Parts>
            <AssemblyPart x:Name=""StatLight.Client.Harness"" Source=""StatLight.Client.Harness.dll"" />
            <AssemblyPart x:Name=""System.Windows.Controls"" Source=""System.Windows.Controls.dll"" />
            <AssemblyPart x:Name=""System.Xml.Linq"" Source=""System.Xml.Linq.dll"" />
            <AssemblyPart x:Name=""System.Xml.Serialization"" Source=""System.Xml.Serialization.dll"" />
            <AssemblyPart x:Name=""Microsoft.Silverlight.Testing"" Source=""Microsoft.Silverlight.Testing.dll"" />
            <AssemblyPart x:Name=""Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight"" Source=""Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll"" />
              </Deployment.Parts>
            </Deployment>
            ";

            _originalXapHost = new ZipFile();
            _originalXapHost.AddEntry("AppManifest.xaml", "/", appManifest);
            _originalXapHost.AddEntry("StatLight.Client.Harness.dll", "/", new byte[] { 1, 2 });
            _originalXapHost.AddEntry("StatLight.Client.Harness.MSTest.dll", "/", new byte[] { 1, 2 });
            _originalXapHost.AddEntry("System.Windows.Controls.dll", "/", new byte[] { 1, 2 });
            _originalXapHost.AddEntry("System.Xml.Linq.dll", "/", new byte[] { 1, 2 });
            _originalXapHost.AddEntry("System.Xml.Serialization.dll", "/", new byte[] { 1, 2 });
            _originalXapHost.AddEntry("Microsoft.Silverlight.Testing.dll", "/", new byte[] { 1, 2 });
            _originalXapHost.AddEntry("Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll", "/", new byte[] { 1, 2 });

            string originalXapHostFileName = Path.GetTempFileName();
            _originalXapHost.Save(originalXapHostFileName);

            var appManifest2 = @"<Deployment xmlns=""http://schemas.microsoft.com/client/2007/deployment"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" EntryPointAssembly=""StatLight.IntegrationTests.Silverlight.MSTest"" EntryPointType=""StatLight.IntegrationTests.Silverlight.App"" RuntimeVersion=""4.0.50826.0"">
              <Deployment.Parts>
            <AssemblyPart x:Name=""StatLight.IntegrationTests.Silverlight.MSTest"" Source=""StatLight.IntegrationTests.Silverlight.MSTest.dll"" />
            <AssemblyPart x:Name=""Microsoft.Silverlight.Testing"" Source=""Microsoft.Silverlight.Testing.dll"" />
            <AssemblyPart x:Name=""Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight"" Source=""Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll"" />
              </Deployment.Parts>
            </Deployment>
            ";

            _originalXapUnderTest = new ZipFile();
            _originalXapUnderTest.AddEntry("AppManifest.xaml", "/", appManifest2);
            _originalXapUnderTest.AddEntry("StatLight.IntegrationTests.Silverlight.MSTest.dll", "/", new byte[] { 1, 2 });
            _originalXapUnderTest.AddEntry("Microsoft.Silverlight.Testing.dll", "/", new byte[] { 1, 2 });
            _originalXapUnderTest.AddEntry("Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll", "/", new byte[] { 1, 2 });
            _originalXapUnderTest.AddEntry("Test.xml", "Test/Test", "Hello");

            // This was a crazy case that the Sterling db project exposed to StatLight (They had duplicate test assemblies)
            _originalXapUnderTest.AddEntry("Microsoft.Silverlight.Testing.dll", "/Binaries/", new byte[] { 1, 2 });
            _originalXapUnderTest.AddEntry("Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll", "/Binaries/", new byte[] { 1, 2 });

            string originalXapUnderTestFileName = Path.GetTempFileName();
            _originalXapUnderTest.Save(originalXapUnderTestFileName);

            _expectedAppManifest = @"<Deployment xmlns=""http://schemas.microsoft.com/client/2007/deployment"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" EntryPointAssembly=""StatLight.Client.Harness"" EntryPointType=""StatLight.Client.Harness.App"" RuntimeVersion=""4.0.50826.0"">
              <Deployment.Parts>
            <AssemblyPart x:Name=""StatLight.Client.Harness"" Source=""StatLight.Client.Harness.dll"" />
            <AssemblyPart x:Name=""System.Windows.Controls"" Source=""System.Windows.Controls.dll"" />
            <AssemblyPart x:Name=""System.Xml.Linq"" Source=""System.Xml.Linq.dll"" />
            <AssemblyPart x:Name=""System.Xml.Serialization"" Source=""System.Xml.Serialization.dll"" />
            <AssemblyPart x:Name=""Microsoft.Silverlight.Testing"" Source=""Microsoft.Silverlight.Testing.dll"" />
            <AssemblyPart x:Name=""Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight"" Source=""Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll"" />
            <AssemblyPart x:Name=""StatLight.IntegrationTests.Silverlight.MSTest"" Source=""StatLight.IntegrationTests.Silverlight.MSTest.dll"" />
              </Deployment.Parts>
            </Deployment>
            ";
            _expectedXapHost = new ZipFile();
            _expectedXapHost.AddEntry("StatLight.Client.Harness.dll", "/", new byte[] { 1, 2 });
            _expectedXapHost.AddEntry("StatLight.Client.Harness.MSTest.dll", "/", new byte[] { 1, 2 });
            _expectedXapHost.AddEntry("System.Windows.Controls.dll", "/", new byte[] { 1, 2 });
            _expectedXapHost.AddEntry("System.Xml.Linq.dll", "/", new byte[] { 1, 2 });
            _expectedXapHost.AddEntry("System.Xml.Serialization.dll", "/", new byte[] { 1, 2 });
            _expectedXapHost.AddEntry("Microsoft.Silverlight.Testing.dll", "/", new byte[] { 1, 2 });
            _expectedXapHost.AddEntry("Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll", "/", new byte[] { 1, 2 });
            _expectedXapHost.AddEntry("StatLight.IntegrationTests.Silverlight.MSTest.dll", "/", new byte[] { 1, 2 });
            _expectedXapHost.AddEntry("Test.xml", "Test/Test", "Hello");
            _expectedXapHost.AddEntry("AppManifest.xaml", "/", _expectedAppManifest);

            // This was a crazy case that the Sterling db project exposed to StatLight (They had duplicate test assemblies)
            _expectedXapHost.AddEntry("Microsoft.Silverlight.Testing.dll", "/Binaries/", new byte[] { 1, 2 });
            _expectedXapHost.AddEntry("Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll", "/Binaries/", new byte[] { 1, 2 });

            string expectedXapHostFileName = Path.GetTempFileName();
            _expectedXapHost.Save(expectedXapHostFileName);
        }
        private byte[] RewriteXapWithSpecialFiles(byte[] xapHost, Func<IEnumerable<ITestFile>> filesToCopyIntoHostXapFunc, string runtimeVersion)
        {
            var files = filesToCopyIntoHostXapFunc();
            if (files.Any())
            {
                var rewriter = new XapRewriter(_logger);

                xapHost = rewriter.RewriteZipHostWithFiles(xapHost, files, runtimeVersion)
                                .ToByteArray();
            }

            return xapHost;
        }
        private byte[] RewriteXapWithSpecialFiles(byte[] xapHost, IEnumerable<ITestFile> filesToCopyIntoHostXap)
        {
            if (filesToCopyIntoHostXap.Any())
            {
                var rewriter = new XapRewriter(_logger);

                xapHost = rewriter.RewriteZipHostWithFiles(xapHost, filesToCopyIntoHostXap)
                                .ToByteArray();
            }

            return xapHost;
        }