你知道,我在任何地方都没有看到一个好的答案.是否可以将预先存在的DLL嵌入到已编译的C#可执行文件中(这样您只能分发一个文件)?如果有可能的话,怎么去做呢?
通常情况下,我很酷,只是将DLL放在外面并让安装程序处理所有内容,但是有几个人在工作,他们问我这个,老实说我不知道.
我有一个依赖外部DLL文件的Visual Studio C++项目.在构建项目时,如何使Visual Studio自动将此DLL文件复制到输出目录(调试/发布)?
这个问题涉及一个ASP.NET网站,最初是在VS 2005中开发的,现在是在VS 2008中开发的.
这个网站使用两个非托管的外部DLL,它们不是.NET,我没有编译它们的源代码,必须按原样使用它们.
这个网站在Visual Studio中运行良好,正确定位和访问这些外部DLL.但是,当网站发布在Web服务器(运行IIS6和ASP.NET 2.0)而不是开发PC时,它无法找到并访问这些外部DLL,我收到以下错误:
Unable to load DLL 'XYZ.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
外部DLL位于网站的bin目录中,以及包装它们的托管DLL以及网站的所有其他DLL.
搜索此问题表明,许多其他人似乎在从ASP.NET网站访问外部非.NET DLL时遇到同样的问题,但我找不到可行的解决方案.
我尝试过以下方法:
任何有关此问题的帮助将不胜感激!
我有一个Windows C#程序,它使用C++ DLL进行数据i/o.我的目标是将应用程序部署为单个EXE.
创建这样的可执行文件有哪些步骤?
我对.NET桌面应用程序不太熟悉(使用Visual Studio 2005).是否可以从单个.exe文件运行整个应用程序?
我有一个混合模式C++项目,生成一个托管DLL程序集导出一些CLR类(称之为Managed.dll).这个项目使用的是原生dll(称之为Native.dll).
当我从另一个生成Client.exe的项目引用Managed.dll时,一切都按预期工作,除了我需要在与Client.exe相同的文件夹中手动复制Native.dll.
如果有办法说服VS本地复制(在Client.exe的bin文件夹中)不仅Managed.dll而且还有Native.dll?
我试图在清单中包含Native.dll作为依赖程序集,但这没有帮助.
编辑
Managed.dll将成为可再发行组件.它将安装在"C:\ Program Files ....."的文件夹中.当使用Visual Studio的开发人员添加对Managed.dll的引用时,还应将Native.dll复制到其项目的\ bin文件夹中.
我正在编写一个使用一些非托管代码的跨平台.NET库.在我的类的静态构造函数中,检测平台并从嵌入式资源中提取适当的非托管库并保存到临时目录,类似于另一个stackoverflow应答中给出的代码.
因此,当它不在PATH中时可以找到它,我在将它保存到临时文件后显式加载它.在Windows上,这可以LoadLibrary从kernel32.dll 正常工作.我正在尝试dlopen在Linux上做同样的事情,但是DllNotFoundException后来在加载P/Invoke方法时我得到了一个.
我已经验证库"libindexfile.so"已成功保存到临时目录并且调用dlopen成功.我钻研了单声道来源,试图弄清楚发生了什么,我想可能归结为是否随后的调用dlopen会重用以前加载的库.(当然假设我通过单声道源头的天真一举得出了正确的结论).
这是我正在尝试做的形状:
// actual function that we're going to p/invoke to
[DllImport("indexfile")]
private static extern IntPtr openIndex(string pathname);
const int RTLD_NOW = 2; // for dlopen's flags
const int RTLD_GLOBAL = 8;
// its okay to have imports for the wrong platforms here
// because nothing will complain until I try to use the
// function
[DllImport("libdl.so")]
static extern IntPtr dlopen(string filename, int …Run Code Online (Sandbox Code Playgroud) 在我的.Net程序集中,我必须使用一些本机(C++)dll.通常我们需要将C++ dll复制到bin文件夹中并用PInvoke它来调用它.为了节省分发成本,我想直接将C++嵌入到我的.Net dll中,这样分发的程序集数量就会减少.
知道怎么做吗?
可能的重复:
在已编译的可执行文件中嵌入 DLL
是否可以将 DLL 嵌入到控制台应用程序中 如果可以的话,我们会如何去做呢?
通常情况下,我很乐意将 DLL 留在外面,但工作中已经有几个人问过我这个问题,老实说我也不知道。