2016-11-23 23 views
1

因此,在我的应用程序中,我有一个使用Pinvoke调用win32 dll中定义的某些函数的actor。我也有一个叫这些演员的前端web服务。使用PInvoke在Azure服务结构中加载dll

当我在本地运行时,一切正常。 win32 dll被找到并正确加载,我的演员可以从那里调用函数。

但是,当我将解决方案部署到Azure时,我只是在演员尝试加载dll时收到内部服务器错误。 Theres没有描述性错误,所以我认为演员要么找不到dll,要么找不到它的某个依赖关系。 我已经尝试过使用dependency walker来找出依赖关系。大多数是典型的Windows二进制文件,但vcruntime140.dll除外。我已将此添加到VS项目通过对项目右击一个资源文件,然后导航到添加>现有项,然后编辑资源的“复制到输出目录”属性的解决方案资源管理器“始终复制”。这是否正确的方式部署一个本地DLL服务结构?我也在发布模式下运行,所以不应该有任何调试DLL的需要。

一些额外的信息 - 我的项目最初从网络API项目移植过来,我能够在释放模式托管在Azure上我的网络API时成功调用函数在Win32 DLL。

让我知道如果我需要提供一些额外的信息

回答

1

所以我想通了。对于谁可以在此之后绊倒人,这里是如何:

当我用的Dependency Walker,我看到了,我对vcruntime140.dll和msvcp140.dll直接依赖关系。然而,通过深入挖掘,我注意到msvcp140.dll对concrt140.dll有一个额外的依赖。当我复制这到我的服务器的bin文件夹,我没有再得到一个内部服务器错误,我可以打电话到我的Win32 DLL。

所有这些都是visual studio C++可重新分发的二进制文件,通常在这里找到“C:\ Program Files文件(x86)\ Microsoft Visual Studio 14.0 \ VC \ redist \ x64 \ Microsoft.VC140.CRT”。