我有一个奇怪的问题,从 C# windows/web 应用程序调用 C dll。
场景是: 我们有一个使用 C# dll (csharp1.dll) 的 C# Web 应用程序。这个 csharp1.dll 作为回报从 C dll (c1.dll) 调用一些函数。并且 c1.dll 作为回报调用另一个 C dll (c2.dll) 用于一些较低的功能。
细节: 在csharp1.dll的实现中,有pinvoke行如:
[DllImport("c1.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
static extern unsafe internal void *openhw(int id);
但是,并没有直接引用c2.dll,c2.dll是LoadLibrary("c2.dll")
在c1.dll中加载的。
问题: 当 csharp1.dll 添加到 C# windows 控制台应用程序时,它可以正常工作,并且 c1.dll 和 c2.dll 的所有功能都可以使用。将 csharp2.dll 添加到 C# Web 应用程序时,会加载 c1.dll,但无法加载 c2.dll。
此问题仅在从 Web 服务器 IIS 运行的 C# Web 应用程序中使用时发生。因此,我尝试将 c2.dll 甚至放入 windows 目录,认为调用进程(IIS)看不到 c2.dll,没有运气。而且我看不出LoadLibrary("c2.dll")
通话有任何问题。
什么可能导致这样的问题?在不改变 c1.dll 和 c2.dll 的实现的情况下如何解决这个问题?
更新:我已尝试调整信任级别并禁用 ShadowCopying,但均无济于事。