2015-06-09 28 views
7

Bu programı çalıştırırken hatayı almaya devam ediyorum: 'System.Security.SecurityException' türünde işlenmeyen bir özel durum oluştu Ek Bilgi: ECall yöntemleri bir sistem modülünde paketlenmelidir.C# Güvenlik İstisnası

class Program{ 
     public static void Main() 
     { 
      Brekel_ProBody2_TCP_Streamer s = new Brekel_ProBody2_TCP_Streamer(); 
      s.Start(); 
      s.Update(); 
      s.OnDisable(); 
     } 
    } 

Bunu nasıl düzeltebilirim?

Brekel kütüphanesinin önemli bölümü şöyledir:

//====================================== 
    // 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 && !readingFromNetwork) 
    { 
     // find body closest to the sensor 
     closest_skeleton_ID = -1; 
     closest_skeleton_distance = 9999999f; 
     for (int bodyID = 0; bodyID < skeletons.GetLength(0); bodyID++) 
     { 
      if (!skeletons[bodyID].isTracked) 
       continue; 
      if (skeletons[bodyID].joints[(int)brekelJoint.waist].position_local.z < 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 < skeletons.GetLength(0); bodyID++) 
     { 
      for (int jointID = 0; jointID < 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; 
       } 
      } 
     } 
+0

Bu Brekel TCP kitaplığına aşina değil. Bir bağlantın var mı? Bu ne işe yarıyor? –

+0

Oldukça uzundur, ancak buradaki fikir Microsoft Kinect'ten gelen iskelet verilerini yakalamak, birisinin Kinects alanında hareket ettiği anda verileri anında akıtmak ve ardından Brekel yazılımı ile görsel stüdyo arasındaki tcpip bağlantısını kapatmaktır. Görmek istediğiniz takdirde kütüphaneyi bir yorumda yapıştırırım. –

+1

http://stackoverflow.com/questions/11286004/securityexception-ecall-methods-must-be-packaged-into-a-system-module –

cevap

18

bir birlik kitaplığı kullanarak ancak bağımsız bir uygulama olarak çalıştırmak için çalıştığınız anlaşılıyor?

Bu hata, Unity motorunda uygulanan bir yöntemi çağırdığınız anlamına gelir. Kütüphaneyi yalnızca Unity içinden kullanabilirsiniz.

bunu tek başına kullanmak istiyorsanız, muhtemelen (örneğin MonoBehaviour

olarak kütüphane kullanıyor şey için uygulamaları sağlamak gerekir demektir herhangi Birlik kütüphaneleri referans olmadan kütüphane derlemek gerekir tek sorunun bir istisna atma debug.log() ise http://forum.unity3d.com/threads/c-error-ecall-methods-must-be-packaged-into-a-system-module.199361/

http://forum.unity3d.com/threads/security-exception-ecall-methods-must-be-packaged-into-a-system-module.98230/

+0

Teorik olarak, kodumu tek başına yapmak yerine kopyalayıp Unity'ye yapıştırabilir miyim? Bağımsız olması gerekçesi yok. –

+0

evet. Sadece Birlik içinden çalıştırın. – Brandon

0

Ayrıca, , kendi Kaydedici örneği yerine Unity birini dikmek yansıma kullanabilirsiniz.

Adım 1: Gerçek günlüğünüzü gerçekleştirecek "MyLogHandler" ı oluşturun (dosyaya yaz veya konsola veya hiçbir şey yapmayın). Sınıfınızın "ILogHandler" arayüzünü uygulaması gerekiyor.

Adım 2: Birlik varsayılanını yenisiyle değiştirin.

var newLogger = new Logger(new MyLogHandler()); 
var fieldInfo = typeof(Debug).GetField("s_Logger", BindingFlags.GetField | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static); 
     fieldInfo.SetValue(null, newLogger); 

Not: o yansıma adıyla alanını erişir ve Birlik gelecekte değiştirmeye karar verirseniz, hatayı derlemek almazsınız unutmayın - istisna çalışma zamanında atılmış olacaktır.

İlgili konular