ComIntegrationManifestGenerator.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / ComIntegration / ComIntegrationManifestGenerator.cs / 1 / ComIntegrationManifestGenerator.cs

                            //------------------------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------------------------
namespace System.ServiceModel.ComIntegration
{ 
    using System;
    using System.ServiceModel; 
    using System.Collections.Generic; 
    using System.Runtime.InteropServices;
    using System.IO; 
    using System.Text;
    using System.Collections;
    using System.Reflection;
 

    // this is a heavily modified version of the Win32ManifestGenerator found in the CLR 
    internal class ComIntegrationManifestGenerator : MarshalByRefObject 
    {
        internal static void GenerateManifestCollectionFile(Guid[] manifests, String strAssemblyManifestFileName, String assemblyName) 
        {
            String title = "";
            String asmTitle = "";
            String asmEnd = ""; 

            String path = Path.GetDirectoryName(strAssemblyManifestFileName); 
            if (!String.IsNullOrEmpty(path) && !Directory.Exists(path)) 
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(System.ServiceModel.ComIntegration.Error.DirectoryNotFound(path)); 

            }

            Stream s = null; 

            try 
            { 
                // manifest title
                s = File.Create(strAssemblyManifestFileName); 
                WriteUTFChars(s, title + Environment.NewLine);
                WriteUTFChars(s, asmTitle + Environment.NewLine);

                WriteUTFChars(s, "" + Environment.NewLine, 8); 
 
                for (int i = 0; i < manifests.Length; i++)
                { 

                    WriteUTFChars(s, "" + Environment.NewLine, 4);

                    WriteUTFChars(s, "" + Environment.NewLine, 8); 
                    WriteUTFChars(s, "" + Environment.NewLine, 16);
 
                    WriteUTFChars(s, "" + Environment.NewLine, 8);
                    WriteUTFChars(s, "" + Environment.NewLine, 4);
                }
 
                WriteUTFChars(s, asmEnd);
 
            } 
            catch (Exception e)
            { 
                if (e is NullReferenceException || e is SEHException)
                {
                    throw;
                } 

                s.Close(); 
                File.Delete(strAssemblyManifestFileName); 
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(System.ServiceModel.ComIntegration.Error.ManifestCreationFailed(strAssemblyManifestFileName, e.Message));
            } 

            s.Close();
        }
 
        internal static void GenerateWin32ManifestFile(Type[] aTypes, String strAssemblyManifestFileName, String assemblyName)
        { 
            String title = ""; 
            String asmTitle = "";
 
            String path = Path.GetDirectoryName(strAssemblyManifestFileName);
            if (!String.IsNullOrEmpty(path) && !Directory.Exists(path))
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(System.ServiceModel.ComIntegration.Error.DirectoryNotFound(path)); 

            } 
 
            Stream s = null;
 
            try
            {
                // manifest title
                s = File.Create(strAssemblyManifestFileName); 
                WriteUTFChars(s, title + Environment.NewLine);
                WriteUTFChars(s, asmTitle + Environment.NewLine); 
 
                WriteUTFChars(s, "" + Environment.NewLine, 8);

                AsmCreateWin32ManifestFile(s, aTypes);
 
            }
            catch (Exception e) 
            { 
                if (e is NullReferenceException || e is SEHException)
                { 
                    throw;
                }

                s.Close(); 
                File.Delete(strAssemblyManifestFileName);
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(System.ServiceModel.ComIntegration.Error.ManifestCreationFailed(strAssemblyManifestFileName, e.Message)); 
            } 

            s.Close(); 
        }

        private static void AsmCreateWin32ManifestFile(Stream s, Type[] aTypes)
        { 
            String asmEnd = "";
 
            WriteTypes(s, aTypes, 4); 
            WriteUTFChars(s, asmEnd);
        } 

        private static void WriteTypes(Stream s, Type[] aTypes, int offset)
        {
            RegistrationServices regServices = new RegistrationServices(); 
            String name = null;
 
            Assembly asm = Assembly.GetExecutingAssembly(); 
            string asmver = asm.ImageRuntimeVersion;
 

            foreach (Type t in aTypes)
            {
                // only registrable managed types will show up in the manifest file 
                if (!regServices.TypeRequiresRegistration(t))
                { 
                    DiagnosticUtility.DebugAssert("User defined types must be registrable"); 

                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperInternal(false); 
                }

                String strClsId = "{" + Marshal.GenerateGuidForType(t).ToString().ToUpperInvariant() + "}";
                name = t.FullName; 

                // this type is a com imported type or Record 
                if (regServices.TypeRepresentsComType(t) || t.IsValueType) 
                {
                    WriteUTFChars(s, "" + Environment.NewLine, offset); 

                    WriteUTFChars(s, "" + Environment.NewLine, offset); 
                }
            }
        }
 
        private static void WriteUTFChars(Stream s, String value, int offset)
        { 
            for (int i = 0; i < offset; i++) 
            {
                WriteUTFChars(s, " "); 
            }
            WriteUTFChars(s, value);
        }
 
        private static void WriteUTFChars(Stream s, String value)
        { 
            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(value); 
            s.Write(bytes, 0, bytes.Length);
        } 
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK