2010-10-06 78 views
1

我有一個MethodCallExpression對象,我試圖返回IObservable<Thing>實例使用Reactive Extensions框架。MethodCallExpression與IObservable拋出拒絕訪問異常System.CoreEx

private IObservable<Thing> GetThing(Expression<Func<Thing>> expression) 
{ 
    Func<Thing> method = expression.Compile() 
    var observable = Observable.FromAsyncPattern<Thing>(method.BeginInvoke, method.EndInvoke); 
    IObservable<Thing> observable = observable(); 
    return observable; 
} 

的問題是,這個執行時我得到observable()以下運行時異常:

Could not load file or assembly 'System.CoreEx, Version=1.0.2617.104, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. Access is denied.

如果我運行的方法不無框架一切都很好。

Thing item = method(); 

任何想法是什麼造成這種情況?所有裝配參考都被添加。

編輯我應該補充說明的問題包含一個方法,該方法在使用Moq創建的Mocked對象上執行。

+0

我只是試圖與一個起訂量模擬對象,並沒有得到一個異常...您的實際代碼等等竟被更多信息d是有幫助的。但首先嚐試最新的Rx構建。 – 2010-10-06 19:09:17

+0

見下面,我得到了這個工作。它似乎在重新啓動後自行修復。另外,原始實施中出現錯誤,在重新啓動後開始提供更有意義的錯誤。我使用的是.Net 4客戶端配置文件,我認爲這也可能會導致問題,但由於設置和代碼相同,所以無法重現該配置文件 - 非常奇怪。 – TheCodeKing 2010-10-07 14:57:00

回答

0

嗯,我設法讓它工作,但我從來沒有真正到達拒絕訪問的問題的底部。它可能是重新啓動解決它。剝我的代碼右後衛和重建它,我開始得到一個不同的錯誤後:

The object must be a runtime Reflection object 

然後我改變了代碼應用的Rx之前換到方法調用到Action,並且這工作:

private IObservable<Thing> GetThing(Expression<Func<Thing>> expression) 
{ 
    var method = expression.Compile(); 
    Func<Thing> =() => method(); 
    var observable = Observable.FromAsyncPattern<Thing>(method.BeginInvoke, method.EndInvoke); 
    return observable(); 
} 

爲了記錄我能夠進一步降低此:

private IObservable<Thing> GetThing(Expression<Func<Thing>> expression) 
{ 
    var method = expression.Compile(); 
    Func<Thing> action =() => method(); 
    return Observable.Start(action); 
} 
0

是否爲當前用戶安裝反應框架?你有讀/可執行文件訪問這個文件嗎?

+0

是的我使用自己的反應框架很好,它只在這種情況下。 – TheCodeKing 2010-10-06 15:54:48

相關問題