将非托管 DLL 部署到输出目录

Posted

技术标签:

【中文标题】将非托管 DLL 部署到输出目录【英文标题】:Deploying unmanaged DLLs to output directory 【发布时间】:2012-05-01 20:31:51 【问题描述】:

我正在尝试组织我的 VS 2010 解决方案。阻碍我的一个领域是使用非托管 DLL。我无法将它们添加为引用,因为 DLL 是非托管的。以前的方法是在 Pre/Post 构建事件期间将 DLL 从“lib”文件夹 xcopy 到输出文件夹。这样做的缺点是每次构建都会发生不必要的复制,而且清理操作从未从输出文件夹中删除 DLL。

我理想的解决方案是将 DLL 合并到 VS lib 文件夹中,并利用“如果更新则复制”功能。但是,VS 在输出文件夹中创建了一个 lib 文件夹并将 DLL 放在那里。请注意,我不喜欢将 DLL 放在我的项目树的顶层。有很多 DLL,这似乎污染了项目。

【问题讨论】:

【参考方案1】:

我会返回发布构建步骤,但使用xcopy /d(仅在更新时复制),并使用类似How to create custom clean (post-clean) event in Visual Studio 2008? 的步骤来实现自定义清理。

您可以通过在每种情况下获取列表并在它们上执行来避免重复的文件列表。

预构建事件只是批处理脚本

您可以使用 MSBUILD 批处理来创建清理步骤适用的列表。

如果您愿意,可以在 msbuild 脚本中编写一个编译前步骤,将文件从源复制到目标,而不是 VS 中的预编译步骤。

【讨论】:

在这种情况下,我必须有 2 个所有非托管 DLL 的列表:一个在 xcopy 例程中,第二个在 clean 事件中。应该有更好的办法... 工程有时会伸出一些电线,可能不符合审美。当然你可以开发一个扩展来满足你的需要——但需要付出什么代价:-)

以上是关于将非托管 DLL 部署到输出目录的主要内容,如果未能解决你的问题,请参考以下文章

如何将非托管 dll 和托管程序集合并到一个文件中?

如何将非托管 C++ 表单嵌入到 .NET 应用程序中?

将非托管 dll 的 Delphi 代码转换为 C#

如何将非托管库引用添加到 NUnit 测试

从非托管 dll 文件(注入到正在运行的进程中)调用托管 dll

将非托管数据复制到托管数组中