我在运行Windows Server 2016的全新生产机器上遇到以下错误。以下dll来自Spitfire(https://github.com/RainwayApp/spitfire)的nuget参考。完全相同的代码可以在我的Windows 10开发人员机器上完美运行。
我如何找出生产机器上的问题?
System.IO.FileNotFoundException: Could not load file or assembly 'Spitfire.dll' or one of its dependencies. The specified module could not be found.
File name: 'Spitfire.dll'
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.Assembly.Load(AssemblyName assemblyRef)
at Owin.Loader.DefaultLoader.AssemblyDirScanner.<GetEnumerator>d__1e.MoveNext()
at Owin.Loader.DefaultLoader.SearchForStartupAttribute(String friendlyName, IList`1 errors, Boolean& conflict)
at Owin.Loader.DefaultLoader.GetDefaultConfiguration(String friendlyName, IList`1 errors)
at Owin.Loader.DefaultLoader.LoadImplementation(String startupName, IList`1 errorDetails)
at Owin.Loader.DefaultLoader.Load(String startupName, IList`1 errorDetails)
at Microsoft.Owin.Hosting.Engine.HostingEngine.ResolveApp(StartContext context)
at Microsoft.Owin.Hosting.Engine.HostingEngine.Start(StartContext context)
at Microsoft.Owin.Hosting.Starter.HostingStarter.Start(StartOptions options)
at Communication.WebRTC.WebRTCHandshaker.WebRTCLoop(String url) in F:\SW\DedicatedServer\Communication\WebRTC\WebRTCHandshaker.cs:line 56
更新1
在spitfire.dll上使用了.NET程序集依赖项walker。在我的本地计算机上获得了此结果。没有什么对我有利。即将在生产服务器上运行,并且将会更新。
更新2:
更新3:
打印以下值都会为生产服务器上的工作文件夹或exe产生正确的值。
System.Reflection.Assembly.GetEntryAssembly().Location.ToString()
Environment.CurrentDirectory
答案 0 :(得分:2)
通常在其中一个依赖项无法加载时发生。
检查 .NET程序集依赖项遍历程序(例如,depends.net)并检查DLL。您需要在生产服务器上运行此检查 。
答案 1 :(得分:1)
二进制文件如何部署在生产计算机上?您正在使用安装程序吗? dll是否打包在安装程序中?您可以在应用程序的安装路径中看到dll吗?
更新:很有可能运行应用程序的Environment.CurrentDirectory不是生产服务器上的应用程序安装路径。将Environment.CurrentDirectory写入控制台/日志文件,并将输出结果与安装目录进行比较。
See this question,如果您需要在运行时查找应用程序的安装路径。
答案 2 :(得分:0)
该问题缺少VC ++可再发行。安装vc_redist.x64.exe后,一切正常。