Asp.net 我应该将非托管dll依赖项放在哪里?

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

我有一个包含两个项目的Visual Studio解决方案:

  • 类库
    MyLib

    • MyLib
      references
      MyAssembly.dll
    • MyAssembly.dll
      依赖于
      mynativedell.dll
      ,它不是.Net程序集,而是本机dll
  • 网络项目
    MyWeb

    • MyWeb
      reference
      MyAssembly.dll
在web项目中,我应该将
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吗?当然不是!如果是这样的话,就不会有任何问题