2013-04-02 211 views
1

我正在開發的應用程序是一個簡單的遠程聊天應用程序。無法加載文件或程序集System.IO.FileNotFoundException

我遇到這個異常,當我嘗試運行我的應用程序。我真的不明白什麼時候談到加載文件或程序集。

「System.Reflection.TargetInvocationException:異常已被調用的目標拋出---> System.IO.FileNotFoundException:找不到。未能加載文件或程序集「客戶端,版本= 1.0.0.0"

try 
{ 
    gt = (Greeting)Activator.GetObject(typeof(Greeting), "tcp://Localhost:7189/Greeting"); 
    handler = new MessageHandler(OnReceive); 
    gt.Sender += handler; 
} 
catch(Exception ex) 
{ 
    textBox2.Text = ex.ToString(); 
} 

此異常是在該行

gt.Sender += handler; 

下面是我的問候類拋出。

[Serializable] 
public delegate void MessageHandler(string mymsg); 
public class Greeting:MarshalByRefObject 
{ 
    public event MessageHandler Sender; 

    public override object InitializeLifetimeService() 
    { 
     return null; 
    } 

    public Greeting() 
    { 
    } 

    public void postGreeting(string msg) 
    { 
     if (Sender != null) 
     { 
      Sender(msg); 
     } 
    } 
} 
+0

客戶端程序集中的'MessageHandler'?此程序集是否已加載到BIN/GAC中? .NET在第一次調用之前不會加載引用的程序集,因此這可能是問題的根源。 –

+0

Greeting類中發生異常。你將不得不調試/探索那個對象。顯示其中的某個方法可能需要在您的機器上不可用的路徑上使用日誌文件或其他方法。 –

+0

@FrazellThomas我是Remoting的新手,我不知道如何檢查程序集是否已加載到BIN/GAC中。也許你可以建議將這個程序集加載到BIN/GAC中的方法。 –

回答

0

使用Microsoft Sysinternals的進程監視器,confiure看你的應用程序的所有文件訪問操作的工具,那麼你就可以看到你的裝配過程中試圖訪問。

1

我認爲處理程序是在客戶程序集中創建的?當您訂閱Greetings.Sender事件時,對處理程序的引用將傳遞到您的服務器組合件。作爲服務器端的反序列化的一部分,它必須解決處理程序類型。由於它位於客戶端組件中,因此服務器組件必須可以訪問它。

將所有程序集構建到單個共享的調試或發佈文件夾中,然後重試。

0

使用微軟sysinternals進程監視器的想法對我來說非常合適。我能夠看到它正在尋找錯誤文件夾中的某個依賴關係。

0

如果遇到Could not load file or assembly使用Assembly Binding Log Viewer(在磁盤上稱爲fuslogvw.exe和availbale從.NET SDK),以搞清楚你的​​進程實際探測,無論是在GAC或您的應用程序文件夾。

典型logentry將舉行類似這樣的信息:

LOG: Processing DEVPATH. 
LOG: DEVPATH is not set. Falling through to regular bind. 
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind). 
LOG: Post-policy reference: graphicfailtest.resources, Version=0.0.0.0, Culture=en-US, PublicKeyToken=null 
LOG: Attempting download of new URL file:///C:/Program Files/Microsoft.NET/FrameworkSDK/Samples/Tutorials/resourcesandlocalization/graphic/cs/en-US/graphicfailtest.resources.DLL. 

,然後你可以驗證它加載組件從你期望的位置,inclusing如果是正確的版本。

Probing來自msdn文檔。

相關問題