我应该在哪里放置一个非托管的dll依赖?

时间:2011-09-15 14:58:17

标签: asp.net dependencies

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

  • 类库MyLib

    • MyLib引用MyAssembly.dll
    • MyAssembly.dll依赖于mynativedll.dll,它不是.Net程序集,而是原生dll。
  • 网络项目MyWeb

    • MyWeb参考MyAssembly.dll

在网络项目中,我应该在哪里放置mynativedll.dll

如果我将此dll放在bin目录中,则清理时dll将无效。

如果我把这个dll放在“Lib”文件夹中的MyAssembly.dll旁边,并且我添加了一个探测路径到这个文件夹,这不起作用。实际上,MyAssembly.dll被复制到bin目录(因为它是一个引用),即使我将“Copy to local”设置为true。

处理此类案件的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

哦......其实就是这样。

我直接引用了Web项目中的MyAssembly.dll(即使从代码角度来看我也不需要)。 然后我在网络目录中将“复制本地”设置为false。

这解决了这个问题。

MyAssembly.dll不会复制到bin文件夹,而是复制到本机dll所在的lib文件夹中的红色。

答案 1 :(得分:0)

您没有使用DllImport属性在外部实现本机库的方法的任何原因?:

[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属性:
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.aspx

外部修饰符:
http://msdn.microsoft.com/en-us/library/e59b22c5%28v=vs.80%29.aspx