public static SnapShot GetFor(Assembly assembly) {
     Type settingsT = assembly.GetSettingsType();
     if (settingsT == null)
         return new SnapShot();
     else
         return GetFor(settingsT.FullName);
     
 }
        /// <summary>
        /// builds a patch from the defaults as defined in the assembly<br/>
        /// Returns an empty patch for assemblies that don't use settings or
        /// are not using the settings provider
        /// </summary>
        /// <param name="assembly"></param>
        /// <returns></returns>
        public static SnapShot BuildFrom(Assembly assembly) {
            SnapShot ret = new SnapShot();
            ret.Assembly = assembly.FullName;

            Type settingsT = assembly.GetSettingsType();
            
            if (settingsT == null)
                throw new ArgumentException("Assembly does not support the SharePoint Primitves Settings Provider.");

            ret.Section = settingsT.FullName;

            var settings = settingsT.GetProperties().Where(p => p.HasCustomAttribute<ApplicationScopedSettingAttribute>(true));
            
            foreach (var setting in settings) {
                if (setting.IsConnectionString())
                    ret.ConnectionStrings.Add(settingsT.FullName + "." + setting.Name, setting.DefaultValue());
                else
                    ret.Settings.Add(setting.Name, setting.DefaultValue());
            }
            return ret;
        }