无法在生产服务器上读取.dll,但可以在开发机上使用

时间:2018-11-05 20:03:53

标签: c# .net

我在运行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。在我的本地计算机上获得了此结果。没有什么对我有利。即将在生产服务器上运行,并且将会更新。 enter image description here

更新2:

不确定我应该看到的内容,但这来自生产服务器enter image description here

更新3:

打印以下值都会为生产服务器上的工作文件夹或exe产生正确的值。

System.Reflection.Assembly.GetEntryAssembly().Location.ToString()
Environment.CurrentDirectory

3 个答案:

答案 0 :(得分:2)

通常在其中一个依赖项无法加载时发生。

检查 .NET程序集依赖项遍历程序(例如,depends.net)并检查DLL。您需要在生产服务器上运行此检查

答案 1 :(得分:1)

二进制文件如何部署在生产计算机上?您正在使用安装程序吗? dll是否打包在安装程序中?您可以在应用程序的安装路径中看到dll吗?

更新:很有可能运行应用程序的Environment.CurrentDirectory不是生产服务器上的应用程序安装路径。将Environment.CurrentDirectory写入控制台/日志文件,并将输出结果与安装目录进行比较。

See this question,如果您需要在运行时查找应用程序的安装路径。

答案 2 :(得分:0)

该问题缺少VC ++可再发行。安装vc_redist.x64.exe后,一切正常。