如何在 Visual Studio 2010 中正确引用 dll?
Posted
技术标签:
【中文标题】如何在 Visual Studio 2010 中正确引用 dll?【英文标题】:How to correctly reference a dll in Visual Studio 2010? 【发布时间】:2013-04-03 07:27:31 【问题描述】:我有一个包含 C++ DLL 项目的解决方案,以及一个将使用该 DLL(通过使用 PInvoke)的 C# 项目。
正在将 dll 构建到我的解决方案文件夹中的 x64/Release
文件夹中,这是有道理的,因为这样 C# 项目就不必插入 DLL 项目的文件夹。
我想知道现在引用它的正确方法是什么。现在,DLL 项目是 C# 项目的依赖项。我的直觉告诉我应该够了,但是 C# 项目说它找不到 DLL。
我也应该添加.dll
文件作为参考吗?我认为这现在可能可行,但从长远来看,当项目设置可能发生变化时会破坏。
【问题讨论】:
C++ DLL 是托管代码吗? @WhozCraig:他说他正在使用 P/Invoke - 那么它一定是不受管理的。 是的,我刚刚看到了。呃。我真的需要睡觉了。 【参考方案1】:我之前回答过一个类似的问题。所以这里不再重复正文。
你可能想看看:
When using open source libraries, should we compile against the source or the binaries?希望对您有所帮助。
【讨论】:
【参考方案2】:通常在这种情况下,我会配置我的解决方案,以便所有项目都编译为$(SolutionDir)bin\$(Configuration)
。然后以与生产模式相同的方式定位二进制文件,并且可以轻松使用 DLL。
至于保持最新版本的 DLL,请记住,您可以设置一个依赖项,这样如果 DLL 发生任何变化,它将在构建您的程序集/应用程序之前重新构建。
另一种方法是使用构建事件(预构建和构建后)将您的 DLL 复制到适当的文件夹中。
【讨论】:
【参考方案3】:您不能在托管项目中添加非托管 DLL 作为引用。 DLL 需要驻留在可执行文件的文件夹或系统 PATH 的任何其他文件夹中。
最好的方法是使用“构建后事件”让 VS 将 DLL 复制到每次重建时都需要它的文件夹中。
【讨论】:
以上是关于如何在 Visual Studio 2010 中正确引用 dll?的主要内容,如果未能解决你的问题,请参考以下文章
关于在Visual Studio2010中如何卸载Visual Asixist这个插件?为啥将它卸载后Visual Studio启动后仍然有