我只是复制一个现有的项目到一个全新的机器上开始开发,并遇到了一个我引用的程序集(一个telerik DLL,因为它发生)的版本的问题。 该项目最初引用了程序集的旧版本(让我们称之为v1.0.0.0)。 我的新机器安装了最新版本的程序集,所以我想我已经更新了它(让我们来调用新版本v2.0.0.0)。 现在,这里的问题是:如果我将旧的v1.0.0.0 dll复制到项目文件夹并添加它作为参考,网站启动没有问题。 如果我删除了该引用(并从系统中删除旧的DLL)并添加新版本(v2.0.0.0),则页面显示以下exception: 无法加载文件或程序集“XXXXXX,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 121fae78165ba3d4”或其某个依赖关系。 定位的程序集清单定义与程序集引用不匹配。 (来自HRESULT的exception:0x80131040) 显然,代码正在寻找过时的版本,找不到它。 但为什么? 我greipe解决scheme文件夹的版本号,并找不到一个单一的参考。 我再次检查.csproj文件的文本,发现版本正确显示最新版本,HintPath正确显示新的DLL的path。 另外,因为我没有在系统上安装旧的DLL,所以没有在我的GAC中显示(虽然v2.0.0.0的确如预期那样)。 然后,我启用融合日志查看器,试图找出为什么它正在寻找旧版本,但没有运气: Assembly Load Trace: The following information can be helpful to determine why the assembly 'XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4' could not be loaded. === Pre-bind state information === LOG: User = MyComp\me LOG: DisplayName […]
DLL文件如何工作? 似乎有很多这样的人,但是我不知道他们是什么或者他们是如何工作的。 那么和他们有什么关系?
我有一个较旧的应用程序(约2005年),它接受的DLL插件。 该应用程序最初是为Win32 C插件devise的,但我有一个工作的C#dll模板。 我的问题:我需要做一些一次性的初始化,在Win32 C DLL将在DllMain完成: BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { [one-time stuff here…] } 有没有一个C#相当于这个? 我没有C#模板中的“DllMain”。 我尝试了一个字面的C#解释,但没有去:该DLL的作品,但它不会触发DllMainfunction。 public static bool DllMain(int hModule, int reason, IntPtr lpReserved) { [one time stuff here…] }
有没有办法加载一个32位的DLL库(与LoadLibrary相同的用法)我想与GetProcAddress一起使用该函数。 我看着WOW,但它似乎并没有提供function。 该function应该存在,因为像DependencyWalker这样的工具能够读取一个32位DLL的符号,即使它的64位。 谢谢
我有一个Java程序与Mavenpipe理其依赖关系。 其中一个依赖是另一个程序的JNI包装。 Maven负责对相关JAR文件的引用,但是我自己把这个DLL文件搞乱了。 有一个让Maven处理DLL的好方法吗? 理想情况下,我想将DLL加载到我们的本地存储库,如JAR文件。
我想共享一个静态/全局variables只有进程和进程调用的DLL之间。 该exe和dll在相同的内存地址空间。 我不希望variables在其他进程之间共享。 详细阐述问题: 假定a.cpp中有一个静态/全局variablesx 。 exe foo.exe和dll bar.dll都有a.cpp ,因此variablesx在两个图像中。 现在, foo.exedynamic加载(或静态) bar.dll 。 然后,问题是variablesx是否被exe和dll共享,或者不是。 在Windows中,这两个人永远不会共享x :这个exe和dll将会有一个单独的x副本。 但是,在Linux中,exe和dll共享variablesx 。 不幸的是,我想要Linux的行为。 我首先考虑在Windows上使用pragma data_seg 。 但是,即使我正确设置共享数据段, foo.exe和bar.dll从不共享x 。 回想一下, bar.dll被加载到bar.dll的地址空间中。 但是,如果我运行foo.exe另一个实例,则共享x 。 但是,我不希望x被不同的进程共享。 所以,使用data_seg失败了。 我可能会使用一个内存映射文件通过在exe和dll之间创build一个唯一的名称,我现在正在尝试。 两个问题: 为什么Linux和Windows的行为有所不同? 任何人都可以解释更多的这个? 在Windows上解决这个问题最简单的方法是什么?
我有一个Windows C#程序,使用C + + DLL的数据I / O。 我的目标是将应用程序部署为单个EXE。 有什么步骤来创build这样的可执行文件?
这个问题涉及一个ASP.NET网站,最初是在VS 2005中开发的,现在在VS 2008中开发。 这个网站使用了两个非托pipe的外部DLL,它们不是.NET,我没有源代码来编译它们,并且必须按原样使用它们。 这个网站在Visual Studio中运行良好,正确定位和访问这些外部DLL。 但是,当网站发布到networking服务器(运行IIS6和ASP.NET 2.0)而不是开发PC时,它无法find并访问这些外部DLL,并且出现以下错误: Unable to load DLL 'XYZ.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E) 外部DLL位于网站的bin目录中,以及包含它们的托pipeDLL以及网站的所有其他DLL。 search这个问题揭示了许多其他人似乎有相同的问题从ASP.NET网站访问外部非.NET DLL,但我还没有find一个解决scheme。 我已经尝试了以下内容: 运行DEPENDS以检查依赖关系,以确定前三个位于path中的System32目录中,最后一个位于.NET 2框架中。 我把这两个DLL和它们的依赖关系放在System32中,并重新启动服务器,但是网站仍然无法加载这些外部DLL。 给ASPNET,IIS_WPG和IUSR(对于那个服务器)的完全的权利到网站的bin目录,并重新启动,但网站仍然无法加载这些外部的DLL。 将外部DLL作为现有项添加到项目中,并将其“复制到输出”属性设置为“始终复制”,而网站仍然无法find这些DLL。 还将其“Build Action”属性设置为“Embedded resource”,网站仍然无法findDLL。 任何援助这个问题将不胜感激!
标题解释。 我有本地的C ++ DLL,我正在编写C ++ / CLI包装,这将反过来将被导入C#作为参考。 问题是,在C#中,我看不到包装(从DLL导入)中的类。 我应该使用什么关键字,以及如何重新声明我的本机C ++对象在C#中可见?
比方说,我用C ++编写了一个DLL,并用一个不重要的析构函数声明了一个类的全局对象。 当DLL被卸载时会调用析构函数吗?