Unity crashes when building after "baking" custom nav mesh.

I have a game where units need to run around small spherical planetoids and I created an a star algorithm that uses waypoints placed all around the planet. The game runs fine when testing in the editor but crashes when I try to build it. The annoying thing is it will build every once in a while after I mess with different things but then only works for a couple builds before it starts crashing again. I wrote a custom class for the waypoints that is Serializable and each waypoint has an adjacency list of neighboring waypoints (I set this to SerializeField and it worked for a while). If anyone can explain why this is happening it would be greatly appreciated. More info can be provided on request.

Waypoint.cs: The script attached to each waypoint.


/// <summary>
/// A node of the nav mesh.
/// </summary>
[Serializable]
public class Waypoint : MonoBehaviour
{
	/// <summary>All the waypoint's neighbors.</summary>
	[SerializeField]
	public Waypoint[] wpList;
	/// <summary>Distance to all the waypoint's neighbors.</summary>
	public float[] distList;  


	/// <summary>
	/// Find the connections to the closets waypoints.
	/// </summary>
	public void Bake(float castRadius, float checkRadius)
	{
		// temp list of adjecent waypoints
		List<Waypoint> conWP = new List<Waypoint>();
		List<float> conDist = new List<float>();

		// run through all the waypoints
		GameObject[] brothers = GameObject.FindGameObjectsWithTag("Waypoint");
		foreach (GameObject next in brothers)
		{
			// stop if self
			if (next == gameObject)
			{
				continue;
			}

			// raycast to next
		    RaycastHit[] rayInfo = Physics.SphereCastAll(transform.position, castRadius, next.transform.position-transform.position, checkRadius);

			// sort by shortest distance
			var orderedInfo =
					from w in rayInfo
					orderby w.distance
					select w;
			
			// run through all the objects the raycast hit
		    foreach (RaycastHit info in orderedInfo)
		    {
				// if hit itself continue
		        if (info.collider.gameObject == gameObject)
		        {
		            continue;
		        }

				// connected to the target object
		        if (info.collider.gameObject == next)
		        {
					conWP.Add(info.collider.GetComponent<Waypoint>());
					conDist.Add(info.distance);
		            break;
		        }
		        else
		        {
		            break;
		        }
		    }
		}

		// set list
		wpList = conWP.ToArray();
		distList = conDist.ToArray();
	} // End Bake

} //  End Waypoint Class

Solved this by instead of each waypoint keeping a gameobject reference to its neighbors it instead says their ID and looks it up in a table when it needs to get the reference.