title: C# Security Exception
body: <p>When running this program I keep receiving the error: 
  An unhandled exception of type 'System.Security.SecurityException' occured
  Additional Information: ECall methods must be packaged into a system module.</p>
  
  <pre><code> class Program{
          public static void Main()
          {
              Brekel_ProBody2_TCP_Streamer s = new Brekel_ProBody2_TCP_Streamer();
              s.Start();
              s.Update();
              s.OnDisable();
          }
      }
  </code></pre>
  
  <p>How can I fix this?</p>
  
  <p>The important part of the Brekel library is as follows:</p>
  
  <pre><code>//======================================
      // Connect to Brekel TCP network socket
      //======================================
      private bool Connect()
      {
          // try to connect to the Brekel Kinect Pro Body TCP network streaming port
          try
          {
              // instantiate new TcpClient
              client = new TcpClient(host, port);
  
              // Start an asynchronous read invoking DoRead to avoid lagging the user interface.
              client.GetStream().BeginRead(readBuffer, 0, READ_BUFFER_SIZE, new AsyncCallback(FetchFrame), null);
  
              Debug.Log("Connected to Brekel Kinect Pro Body v2");
              return true;
          }
          catch (Exception ex)
          {
              Debug.Log("Error, can't connect to Brekel Kinect Pro Body v2!" + ex.ToString());
              return false;
          }
      }
  
  
      //===========================================
      // Disconnect from Brekel TCP network socket
      //===========================================
      private void Disconnect()
      {
          if (client != null)
              client.Close();
          Debug.Log("Disconnected from Brekel Kinect Pro Body v2");
      }
  
   public void Update()
  {
      // only update if connected and currently not updating the data
      if (isConnected &amp;&amp; !readingFromNetwork)
      {
          // find body closest to the sensor
          closest_skeleton_ID = -1;
          closest_skeleton_distance = 9999999f;
          for (int bodyID = 0; bodyID &lt; skeletons.GetLength(0); bodyID++)
          {
              if (!skeletons[bodyID].isTracked)
                  continue;
              if (skeletons[bodyID].joints[(int)brekelJoint.waist].position_local.z &lt; closest_skeleton_distance)
              {
                  closest_skeleton_ID = bodyID;
                  closest_skeleton_distance = skeletons[bodyID].joints[(int)brekelJoint.waist].position_local.z;
              }
          }
  
          // apply to transforms (cannot be done in FetchFrame, only in Update thread)
          for (int bodyID = 0; bodyID &lt; skeletons.GetLength(0); bodyID++)
          {
              for (int jointID = 0; jointID &lt; skeletons[bodyID].joints.GetLength(0); jointID++)
              {
                  // only apply if transform is defined
                  if (skeletons[bodyID].joints[jointID].transform != null)
                  {
                      // apply position only for waist joint
                      if (jointID == (int)brekelJoint.waist)
                          skeletons[bodyID].joints[jointID].transform.localPosition = skeletons[bodyID].joints[jointID].position_local;
  
                      // always apply rotation
                      skeletons[bodyID].joints[jointID].transform.localRotation = skeletons[bodyID].joints[jointID].rotation_local;
                  }
              }
          }
  </code></pre>