2015-10-26 84 views
0

我有一個Azure Mobile Service項目,它依賴於引用FluentNHibernate的另一個(持久性)項目。在ReleaseDebug模式下,本地一切都正常運行。發佈該項目似乎是成功的(藍色笑臉)。我提出請求時會出現問題,其中使用FluentNHibernate。我收到以下錯誤消息:無法在Azure移動服務上找到程序集

無法找到程序集'FluentNHibernate,版本= 2.0.3.0,Culture = neutral,PublicKeyToken = null'。

我已經嘗試了很多東西:

  • 重新安裝包
  • 一個新的單純功能的移動服務
  • 在持久項目添加在主體工程Web.configApp.configdependentAssembly

有點令我困惑的是:當我更改FluentNHibernate包的版本時,我可以在發佈預覽窗口看到這個dll不會被更新。

我真的不確定這個問題是否依賴於這個特定的包(FluentNHibernate)。例如,什麼意思:PublicKeyToken=null? 我還可以嘗試使服務在雲中運行嗎?

+1

你不應該需要Web.config'的'了'dependentAssembly'部分的任何條目堅持這個作爲第一行,所以我刪除這些文件。 'PublicKeyToken = null'表示程序集沒有簽名,這很好。我能夠做一個非常簡單的repro並使程序集正確加載,因此可能會發生更復雜的事情。當你到{yoursite} .scm.azure-mobile.net,點擊'Debug Console' - >'CMD'並轉到'site \ wwwroot \ bin',你看到FluentNHibernate.dll嗎?如果是這樣,你在本地下載它,它是什麼版本? – brettsam

+0

我還不知道SCM儀表板。非常感謝您的建議!但該DLL在那裏,並有正確的版本。 – core

+0

我只是試着將我所有的NHibernate交互轉移到一個單獨的引用程序集中,以查看我是否可以重新編寫它,但是不能。你在哪裏看到錯誤消息 - 它是否在門戶日誌中?如果是這樣,你可以(a)分享完整的錯誤消息,如果你還沒有(b)嘗試創建一個新的臨時移動服務,並在那裏發佈你的項目,看看它是否也發生在那裏(c)嘗試明確刪除FluentNHibernate。通過SCM儀表板並再次檢查發佈預覽窗口dll – brettsam

回答

3

下面的代碼適用於我的解決方案。它將一個處理程序連接到AppDomain的AssemblyResolve事件,如果無法找到程序集,則會引發該事件。在這種情況下,我告訴它檢查當前加載的程序集並返回一個,如果匹配,那麼應該爲FluentNHibernate。嘗試在WebApiConfig.Register

public static void Register() 
{ 
    AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => 
     { 
      return AppDomain.CurrentDomain.GetAssemblies() 
       .Where(a => a.FullName == args.Name).FirstOrDefault(); 
     }; 

    // the rest of WebApiConfig.Register... 
} 
相關問題