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

.net 将非托管DLL部署到输出目录,.net,deployment,msbuild,unmanagedresources,.net,Deployment,Msbuild,Unmanagedresources,我正在尝试组织我的VS 2010解决方案。阻碍我的一个方面是非托管DLL的使用。我无法将它们添加为引用,因为DLL是非托管的。以前的方法是在编译前/编译后事件期间将DLL从“lib”文件夹复制到输出文件夹。这样做的缺点是每次生成都会发生不必要的复制,而且清除操作从未从输出文件夹中删除DLL 我的理想解决方案是将DLL整合到VS lib文件夹中,并利用“更新时复制”功能。但是,VS会在输出文件夹中创建一个lib文件夹,并将DLL放在那里。请注意,我不希望DLL位于项目树的顶层。有很多DLL,这似乎

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


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

我会回到构建后的步骤,但使用
xcopy/d
(如果更新,则仅复制),并使用这样的步骤实现自定义清理

通过在每种情况下获取文件列表并对其执行,可以避免重复的文件列表

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

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


如果需要,可以在msbuild脚本中编写beforecomile步骤,将文件从源复制到目标,而不是VS中的预编译步骤。

在这种情况下,我必须有两个所有非托管DLL的列表:一个在xcopy例程中,另一个在clean事件中。应该有更好的方法……有时候,工程设计中有一些电线伸出,可能对一个人的美感并没有吸引力。当然,您可以开发一个只满足您需要的扩展—但代价是什么:-)