2017-06-26 24 views
0

使用AssimpNet我可以創建一個新的控制檯應用程序或WinForms應用程序,並添加NuGet包的AssimpNet(3.3.2版本),但由於某些原因,當我試圖從內新鮮加載任何3D文件ASP.NET的Web API項目,我得到以下異常:不能在ASP.NET

例外:

Error loading unmanaged library from path: Assimp32.dll, see inner exception for details.The specified module could not be found. (Exception from HRESULT: 0x8007007E)` 

內部異常:

The specified module could not be found. (Exception from HRESULT: 0x8007007E)` 

我試圖編譯我的AnyCPU項目,86 ,和x64具有相同的結果。只有在嘗試使用該庫時纔會拋出此異常。其他端點仍然正常工作,並且所有內容都沒有任何警告地編譯。我可以用一個全新的ASP.NET Web API項目一致地重現該問題。

任何幫助將不勝感激。

完整的錯誤消息和堆棧跟蹤是:

An error has occurred.Error loading unmanaged library from path: Assimp32.dll, see inner exception for details. 
The specified module could not be found. (Exception from HRESULT: 0x8007007E)Assimp.AssimpException at Assimp.Unmanaged.AssimpLibraryWindowsImplementation.NativeLoadLibrary(String path) 
    at Assimp.Unmanaged.AssimpLibraryImplementation.LoadAssimpLibrary(String path) 
    at Assimp.Unmanaged.AssimpLibrary.LoadLibrary() 
    at Assimp.Unmanaged.AssimpLibrary.CreatePropertyStore() 
    at Assimp.AssimpContext.CreateConfigs() 
    at Assimp.AssimpContext.ImportFile(String file, PostProcessSteps postProcessFlags) 
    at Assimp.AssimpContext.ImportFile(String file) 
    at AssimpTest.Controllers.ValuesController.Get(Int32 id) in c:\users\eric\documents\visual studio 2015\Projects\AssimpTest\AssimpTest\Controllers\ValuesController.cs:line 21 
    at lambda_method(Closure , Object , Object[]) 
    at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters) 
    at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments) 
    at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken) 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Web.Http.Controllers.AuthenticationFilterResult.<ExecuteAsync>d__0.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()An error has occurred.The specified module could not be found. (Exception from HRESULT: 0x8007007E)System.IO.FileNotFoundException 

回答

0

事實證明,ASP.NET(或IIS,我不知道它)的地方查找非託管的.dll在PATH服務器。這個問題的解決局部是Assimp32.dll複製到Syswow64資料(是的,即使應用程序被作爲64位執行正在使用的32位的庫)。

在Azure(託管我的生產環境)上,您可以通過FTP或Kudu爲非託管庫創建自定義文件夾,然後通過遵循this guide from Project Kudu修改應用服務器的PATH。

如果你是在一個控制檯或桌面應用程序運行AssimpNet應該與被複制到您的解決方案的\ bin文件夾Assimp32.dll的副本。如果有人能夠解釋爲什麼不是控制檯或桌面應用程序一樣,我將贊成票非常高興。