Asp.net 我应该将非托管dll依赖项放在哪里?
我有一个包含两个项目的Visual Studio解决方案:Asp.net 我应该将非托管dll依赖项放在哪里?,asp.net,dependencies,Asp.net,Dependencies,我有一个包含两个项目的Visual Studio解决方案: 类库MyLib MyLibreferencesMyAssembly.dll MyAssembly.dll依赖于mynativedell.dll,它不是.Net程序集,而是本机dll 网络项目MyWeb MyWebreferenceMyAssembly.dll 在web项目中,我应该将mynativedell.dll放在哪里 如果我将此dll放在bin目录中,则清理时该dll将无效 如果我将此dll放在“Lib”文件夹中的My
- 类库
MyLib
referencesMyLib
MyAssembly.dll
依赖于MyAssembly.dll
,它不是.Net程序集,而是本机dllmynativedell.dll
- 网络项目
MyWeb
referenceMyWeb
MyAssembly.dll
mynativedell.dll
放在哪里
如果我将此dll放在bin目录中,则清理时该dll将无效
如果我将此dll放在“Lib”文件夹中的MyAssembly.dll
旁边,并向该文件夹添加探测路径,则此操作无效。实际上,MyAssembly.dll
被复制到bin目录(因为它是一个引用),即使我将“Copy to local”设置为true
处理此类案件的正确方法是什么?哦。。。事实上很简单
我在web项目中直接引用了MyAssembly.dll
(即使从代码的角度来看我也不是必需的)。
然后我在web目录中将“Copy local”设置为false
这就解决了问题
MyAssembly.dll
不会复制到bin文件夹,而是从本机dll所在的lib文件夹中复制到红色。您为什么不在外部使用dlliport属性实现本机库的方法
[DllImport("advapi32.dll")]
private static extern int LogonUserA(String lpszUserName, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int DuplicateToken(IntPtr hToken, int impersonationLevel, ref IntPtr hNewToken);
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool RevertToSelf();
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
private static extern bool CloseHandle(IntPtr handle);
DllImport属性:外部修饰符:
MyNativedell.dll是COM dll吗?我不确定这会解决您的问题。我打赌,如果你查看
/bin
文件夹,你会看到两个.dll
文件的旧副本。正确的答案是把它们都放在/bin
@Eric:不。。。bin不是手动放置dll的好位置。但你是对的,我必须清理bin文件夹才能让它工作。@James Johnson:我要等两天你才能使用项目引用。在需要非托管dll的项目中,可以将其添加到项目中,但可以将属性的窗口生成操作设置为Content
。当被其他项目引用时,它将自动复制。MyAssembly.dll和MyNativeLibrary.dll都是第三方。。。我的问题不是dll如何工作,而是dll是由操作系统提供的本机dll吗?当然不是!如果是这样的话,就不会有任何问题