我需要使用C或C ++中的Win32本地API获取DLL或EXE文件的产品版本和文件版本。 我不是在寻找Windows版本,而是通过右键单击DLL文件,select“属性”,然后查看“详细信息”选项卡,看到的版本号。 这通常是由四部分组成的虚线版本号xxxx
有时当我正在做一个小项目时,我不够小心,意外地为我不知道的DLL添加依赖项。 当我把这个程序发送给朋友或其他人“它不工作”,因为“一些DLL”丢失。 这是当然的,因为程序可以在我的系统上findDLL,而不是他们的。 有一个程序/脚本,可以扫描DLL的依赖项的可执行文件或执行程序在一个“干净的”无DLL的环境进行testing,以防止这些oops情况?
目前我有一些正在dynamic生成的代码。 换句话说,C#.cs文件是由程序dynamic创build的,其目的是将此C#文件包含在另一个项目中。 面临的挑战是我想生成一个.DLL文件,而不是生成一个C#.cs文件,以便它可以被任何types的.NET应用程序(不仅仅是C#)引用,因此更有用。
如何在Visual Studio中设置项目来复制项目引用所依赖的第三方DLL? 我有一个主要的应用程序项目和一个类库DLL。 主应用程序引用了类库DLL,而DLL本身引用了一些第三方DLL。 当我编译主应用程序时,它会自动将类库DLL复制到其输出目录,但不会复制第三方DLL。 我不想从主应用程序项目中添加对第三方DLL的引用,因为主应用程序不使用它们,它们只被类库使用。
如果您创build一个使用其他程序集的类库,是否可以将这些其他程序集embedded到类库中作为某种资源? 即,而不是让MyAssembly.dll , SomeAssembly1.dll和SomeAssembly2.dll坐在文件系统上,这些其他两个文件捆绑到MyAssembly.dll ,并在其代码中可用。 我也有点困惑,为什么.NET程序集是.dll文件。 .NET之前没有这种格式? 是所有的.NET程序集DLL,但不是所有的DLL都是.NET程序集? 为什么他们使用相同的文件格式和/或文件扩展名?
我的Java应用程序使用DLL库。 我怎样才能从JAR文件工作? 该DLL位于项目的源文件夹中。 我必须将其包含在我的JAR中,在运行时(在jar的同一个目录中)提取它并加载它。
曾经在我的asp.net webforms应用程序工作,现在抛出这个错误: System.MissingMethodException:未find方法 DoThis方法是在同一个类,它应该工作。 我有一个通用的处理程序: public class MyHandler: IHttpHandler { public void Processrequest(HttpContext context) { // throws error now System.MissingMethodException: Method not found? this.DoThis(); } public void DoThis() { // } }
创build基本的C ++ DLL并使用模块定义文件(MyDLL.def)导出名称。 编译后,我使用dumpbin.exe检查导出的函数名称,我期望看到: SomeFunction 但我看到这个: SomeFunction = SomeFunction@@@23mangledstuff#@@@@ 为什么? 导出的函数显示为未修饰(特别是与不使用Module Def文件相比),但是其他的东西呢? 如果我使用dumpbin.exe从任何商业应用程序的DLL,你会得到干净的: SomeFunction 没有别的 我也尝试删除模块定义并使用“C”风格的导出导出名称,即: extern "C" void __declspec(dllexport) SomeFunction(); (只需使用“extern”C“不会创build导出的函数) 但是,这仍然产生相同的输出,即: SomeFunction = SomeFunction@@@23mangledstuff#@@@@ 我也尝试了#define dllexport __declspec(dllexport)选项,并创build了一个没有问题的LIB。 不过,我不想为在C#应用程序中使用DLL的人提供一个LIB文件。 这是一个普通的香草C ++ DLL(非托pipe代码),用C ++编译,只不过是一个简单的头文件和代码。 没有模块def我得到了损坏的导出函数(我可以创build一个静态库,并使用LIB没有问题,我试图避免这一点)。 如果我使用extern "C" __declspec(dllexport) 或模块定义我得到什么似乎是一个未装饰的函数名称…唯一的问题是,它后面跟着一个“=”,看起来像一个装饰版本function。 我想摆脱“=”后的东西 – 或者至less明白为什么它在那里。 现在,我敢肯定,我可以使用P / Invoke从C#调用函数…我只是想避免在“=”结尾的垃圾。 我打开如何更改项目/编译器设置的build议,但我只使用标准的Visual Studio DLL模板 – 没有什么特别的。
我使用的是引用log4net 1.2.10.0的NHibernate 2.1.2.400。 在同一个项目中,我也使用了简单的会计SDK,遗憾的是它仍然使用log4net 1.2.9.0。 所以我可以让NHibernate的工作,如果我引用log4net 1.2.10.0,但简单的SDK不起作用。 反之亦然 我猜大部分的问题来自于log4net已经改变了它的组装密钥。 我尝试使用绑定redirect而没有成功:2个DLL不具有相同的密钥。 我正在考虑重新编译NHibernate使用log4net 1.2.9.0,但这似乎是错误的事情,我的感觉是,简单会计不会更新他们的SDK使用log4net 1.2.10.0不久。 处理这个问题的最好方法是什么? 有没有可能解决?
这个警告: LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library 是在Visual Studio中相当常见的警告>我想了解它的确切原因和正确的方法(如果有的话)来处理它。 这出现在一个debugging版本中,用/MDd编译。 该项目链接到像Windows Version.dll和pdh.dll ,它们自己与MSVCRT.dll链接的东西。 显然,我没有这些debugging版本,不能编译它们。 所以我添加/NODEFAULTLIB:MSVCRT到链接器命令行,它实际上删除了警告。 但是这实际上是做什么的? 为什么这是必要的?