We Moved - This Forum is now Read-Only

Our new community is now available at https://support.submain.com/community/. We will leave historical discussions here in this forum view-only mode for search purposes, but moving forward, please post your questions in the appropriate category in the new community.

 
  SubMain - CodeIt.Right The First Time!

/Community

Support Community for SubMain Products
 Home Products Services Download Purchase Support
in Search
 
Home Forums Blogs Tutorials/CIR Tutorials/GD Downloads
Welcome to SubMain Community Sign in | Join | Help

Please clarify the 3 machine rule for Ghostdoc Pro

Last post 01-07-2011, 4:52 PM by TATWORTH. 4 replies.
Sort Posts: Previous Next
  •  01-06-2011, 3:52 PM 1543

    Please clarify the 3 machine rule for Ghostdoc Pro

    I like the sound of GhostDoc Pro but as a computer contractor I will install on my two home PCs and install it on my PC at my current client. Can I de-install it at the end of the contract and install it at the next client site? Is the third machine personal licence transferable?
  •  01-06-2011, 11:00 PM 1544 in reply to 1543

    Re: Please clarify the 3 machine rule for Ghostdoc Pro

    Yes, you can install GhostDoc Pro at the new client site as long you uninstalled the copy at the current client and completely removed all GhostDoc folders on their computer.

    Our product licenses are transferable.

    Thanks!


    Thank you,
    Serge Baranovsky
    http://submain.com - .NET Developer Tools  |  Microsoft MVP  |  ASP Insider
    » » CodeIt.Right Will Fix Your Code!™ - http://submain.com/codeit.right
    » » C#/VB .NET Coding Guidelines - FREE 100+ page ebook (PDF) http://submain.com/guidelines
  •  01-07-2011, 7:58 AM 1545 in reply to 1544

    Re: Please clarify the 3 machine rule for Ghostdoc Pro

    Thank you! I will be buying a licence and will blog about about it.

    I have found a problem when using it GhostDoc Pro to document a custom exception class. There were two issues:

    1) It produced a line consisting just of "///" in one of the constructors

    2) For two of the constructors it specified System.Exeception and not the class name

    The errors came to light when running StyleCop

    I will produce a before and after code example on my own PC and post it in a new thread.

     

  •  01-07-2011, 8:26 AM 1547 in reply to 1545

    Re: Please clarify the 3 machine rule for Ghostdoc Pro

    Thank you!

    Yes, that would be extremely helpful if you could provide code samples so we could reproduce and fix the issue(s) should we have them.

     


    Thank you,
    Serge Baranovsky
    http://submain.com - .NET Developer Tools  |  Microsoft MVP  |  ASP Insider
    » » CodeIt.Right Will Fix Your Code!™ - http://submain.com/codeit.right
    » » C#/VB .NET Coding Guidelines - FREE 100+ page ebook (PDF) http://submain.com/guidelines
  •  01-07-2011, 4:52 PM 1550 in reply to 1547

    Re: Please clarify the 3 machine rule for Ghostdoc Pro

    Here is a sample custom exception class

     

    namespace Demo
    {
      using System;
      using System.Runtime.Serialization;
      using System.Security.Permissions;

      [Serializable]
      public sealed class DemoException : Exception
      {
        public DemoException()
        {
        }

        public DemoException(string message) : base(message)
        {
        }

        public DemoException(string message, Exception inner) : base(message, inner)
        {
        }

        private DemoException(SerializationInfo info, StreamingContext context) : base(info, context)
        {
        }

        [SecurityPermission(SecurityAction.Demand, SerializationFormatter = true)]
        public override void GetObjectData(SerializationInfo info, StreamingContext context)
        {
          base.GetObjectData(info, context);
        }
      }
    }

    Using the document the file option (errors marked in bold):

    namespace Demo
    {
      using System;
      using System.Runtime.Serialization;
      using System.Security.Permissions;

      /// <summary>
      ///
      /// </summary>
      /// <remarks></remarks>
      [Serializable]
      public sealed class DemoException : Exception
      {
        /// <summary>
        /// Initializes a new instance of the <see cref="T:System.Object"/> class.
        /// </summary>
        /// <remarks></remarks>
        public DemoException()
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="DemoException"/> class.
        /// </summary>
        /// <param name="message">The message.</param>
        /// <remarks></remarks>
        public DemoException(string message) : base(message)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="DemoException"/> class.
        /// </summary>
        /// <param name="message">The message.</param>
        /// <param name="inner">The inner.</param>
        /// <remarks></remarks>
        public DemoException(string message, Exception inner) : base(message, inner)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="T:System.Exception"/> class with serialized data.
        /// </summary>
        /// <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
        /// <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
        /// <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception>
        ///  
        /// <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception>
        /// <remarks></remarks>
        private DemoException(SerializationInfo info, StreamingContext context) : base(info, context)
        {
        }

        /// <summary>
        /// When overridden in a derived class, sets the <see cref="T:System.Runtime.Serialization.SerializationInfo"/> with information about the exception.
        /// </summary>
        /// <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
        /// <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
        /// <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is a null reference (Nothing in Visual Basic). </exception>
        ///  
        /// <PermissionSet>
        ///   <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Read="*AllFiles*" PathDiscovery="*AllFiles*"/>
        ///   <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="SerializationFormatter"/>
        ///   </PermissionSet>
        /// <remarks></remarks>
        [SecurityPermission(SecurityAction.Demand, SerializationFormatter = true)]
        public override void GetObjectData(SerializationInfo info, StreamingContext context)
        {
          base.GetObjectData(info, context);
        }
      }
    }

     The correctly documented class (according to stylecop) is:

    // <copyright file="DemoException.cs" company="Cive Chinery">
    // Copyright LGPL (c) 2010 All Right Reserved
    // </copyright>

    namespace Demo
    {
      using System;
      using System.Runtime.Serialization;
      using System.Security.Permissions;

      /// <summary>
      /// Demo Exception
      /// </summary>
      /// <remarks></remarks>
      [Serializable]
      public sealed class DemoException : Exception
      {
        /// <summary>
        /// Initializes a new instance of the <see cref="DemoException"/> class.
        /// </summary>
        /// <remarks></remarks>
        public DemoException()
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="DemoException"/> class.
        /// </summary>
        /// <param name="message">The message.</param>
        /// <remarks></remarks>
        public DemoException(string message) : base(message)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="DemoException"/> class.
        /// </summary>
        /// <param name="message">The message.</param>
        /// <param name="inner">The inner.</param>
        /// <remarks></remarks>
        public DemoException(string message, Exception inner) : base(message, inner)
        {
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="DemoException"/> class with serialized data.
        /// </summary>
        /// <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
        /// <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
        /// <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is null. </exception>
        /// <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult"/> is zero (0). </exception>
        /// <remarks></remarks>
        private DemoException(SerializationInfo info, StreamingContext context) : base(info, context)
        {
        }

        /// <summary>
        /// When overridden in a derived class, sets the <see cref="DemoException"/> with information about the exception.
        /// </summary>
        /// <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
        /// <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"/> that contains contextual information about the source or destination.</param>
        /// <exception cref="T:System.ArgumentNullException">The <paramref name="info"/> parameter is a null reference (Nothing in Visual Basic). </exception>
        /// <PermissionSet>
        ///   <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Read="*AllFiles*" PathDiscovery="*AllFiles*"/>
        ///   <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="SerializationFormatter"/>
        ///   </PermissionSet>
        /// <remarks></remarks>
        [SecurityPermission(SecurityAction.Demand, SerializationFormatter = true)]
        public override void GetObjectData(SerializationInfo info, StreamingContext context)
        {
          base.GetObjectData(info, context);
        }
      }
    }

View as RSS news feed in XML
 
     
 
Home |  Products |  Services |  Download |  Purchase |  Support |  Community |  About Us |