ExeciteInEditMode: Why wont this script work?

Entire code is at bottom of this post. The first debug message in Awake doesn’t trigger when i drop a copy of this script onto an object. It just sits there as an inert component.

how do i make Awake() fire, or what else should i use

using UnityEngine;
using System.Collections;

public class DropToFloor : MonoBehaviour {

	// Use this for initialization
    
    Vector3 MiddleBottom;
    Vector3 GroundPoint;
    Vector3 min;
    Vector3 max;
    LayerMask layerMask;

    [ExecuteInEditMode]
	void Awake() 
    {
        print("Droptofloor is starting");
        if (FindBottom())
        {
            FindGround();
            Move();
        }
        DestroyImmediate(this);
	}

    bool FindBottom()
    {
        
        if (collider)
        {
            min = collider.bounds.min;
            max = collider.bounds.max;
        }
        else if (renderer)
        {
            min = renderer.bounds.min;
            max = renderer.bounds.max;
        }
        else
        {
            Collider[] temp = GetComponentsInChildren<Collider>();
            foreach (Collider col in temp)
            {
                if (min.y > col.bounds.min.y && (min.x > col.bounds.min.x || min.z > col.bounds.min.x))
                {
                    min = col.bounds.min;
                }

                if (max.y < col.bounds.max.y && (max.x < col.bounds.max.x || max.z < col.bounds.max.x))
                {
                    max = col.bounds.max;
                }
            }
        }

        //We find a point that is centred on the X and Z axes, but minimal on the Y axis
        float Xrange = max.x - min.x;
        float Zrange = max.z - min.z;

        MiddleBottom = new Vector3((min.x + (0.5f * Xrange)), min.y, (min.z + (0.5f * Zrange)));
        return true;
    }

    void FindGround()
    {
        layerMask = PhysicsTools.BuildCollisionProfile(gameObject);
        RaycastHit hit;
        Physics.Raycast(MiddleBottom, Vector3.down, out hit, Mathf.Infinity, layerMask);
        GroundPoint = hit.point;
    }

    void Move()
    {
        Vector3 diff = GroundPoint - MiddleBottom;
        transform.position = transform.position + diff;
    }
	
}

ExecuteInEditMode is an attribute for a class, not for a method. You should put it on your class like this:

// ...

[ExecuteInEditMode]
public class DropToFloor : MonoBehaviour {

// ...