重建/清理解决方案后.dll文件丢失

13

我的解决方案中有3个项目和一堆第三方或公司的dll文件。每次我重建我的项目或清理解决方案时,很多这些dll文件都会被删除,因此无法使用。在重新构建后不断引用这些dll文件非常令人烦恼。有人能说明如何避免这种情况吗?提前感谢。


1
你在项目中已经“引用”了它们,但它们还是丢失了吗?还是你只是把dll文件复制到输出目录中了? - Habib
在属性菜单中(在设计器中),对于引用,它们是否有“复制本地”选项(如果未设置,则可能是它们不在文件夹中的原因)。 - Thomas
@Habib 我在根目录下创建了bin文件夹,并将所有dll文件复制到其中,然后通过引用-添加引用从该文件夹中引用它们。 - Shukhrat Raimov
@ShukhratRaimov,你的项目根目录上应该已经有一个bin文件夹了。 - Habib
清理解决方案将删除bin文件夹中的所有二进制文件。您需要从实际位置引用它,每次构建都会将它们不可避免地从目标二进制文件夹复制到bin中。 - Mrinal Kamboj
显示剩余2条评论
3个回答

14

bin文件夹只是构建输出的二进制文件,因此当您清理解决方案时,bin文件夹中的所有程序集都会被删除。您应该从其他位置引用这些程序集。其中一个建议是在项目中创建一个名为Shared Resources的文件夹,将程序集复制到该文件夹中,然后从该文件夹引用它们。这样,在清理/重建时它们就不会从bin中删除,并且Visual Studio会根据需要将它们复制到那里。

  1. 在项目中右键单击References文件夹,选择Add Reference...
  2. 使用浏览功能来定位要引用的程序集(无需手动将它们复制到/从bin文件夹)
  3. 添加引用后,右键单击引用列表中的引用,选择Properties
  4. 确保Copy Local属性设置为True

这将确保每次构建时都将程序集复制到您的bin文件夹中。


1
谢谢你的回答。所以实际上,当我清理/重建我的子项目时,那么这个子项目中的bin文件夹将被清空。如果我重建整个解决方案,那么根目录中的bin文件夹会被删除还是每个子项目中的bin文件夹都会被清空? - Shukhrat Raimov
当您清理项目时,该项目的bin文件夹将被清空。在解决方案级别上没有bin文件夹,因此当您清理解决方案时,它将清空该解决方案中所有项目的bin文件夹。我认为Visual Studio有一些特殊规则来确定执行清理时哪些文件/文件夹会被删除,因此可能会有一些文件残留。但重要的是,bin文件夹是构建的输出,您不希望手动从那里复制/引用程序集... - Troy Carlson

0
在我的情况下,.net框架版本是问题所在。我不得不将其版本降低到4.5,然后项目才能正确构建并能够在其他项目中引用。

0

正如Troy在他的回答中所解释的那样,确实引用了位于bin文件夹外的*.dll文件可以确保当清理项目时不会彻底删除dll文件。

但是,仅添加对程序集的引用可能不足够。例如,对于某些其他文件类型,例如*.pdb文件以及*.resources.dll文件(通常分散在以语言代码(2个字母的语言代码)命名的许多子文件夹中),这种方法不适用

为了用一个现实生活中的情况来描述这个问题,我选择了一个源代码已经丢失或者不再兼容等问题的程序集。我特意选了一个由许多组件文件组成的13年前的AjaxControlToolkit。下面的图片说明了它的组成。每次将“清理”命令应用于项目时,除了被引用的程序集之外,所有这些文件都会被删除。此外,在同一项目内从“引用”中添加每个具有相同名称的*.resources.dll文件程序集非常不方便,甚至是不可能的。

enter image description here

然而,这里有一个相当简单的解决方法:

  1. 将此文件层次结构保留在单独的文件夹中(如Troy在他的答案中所解释的那样)
  2. 只需在项目的Pre-build事件中使用命令行将它们复制到bin文件夹中,例如xcopy "$(SolutionDir)AjaxControlToolkit" "$(TargetDir)" /y /i /s /r /q

enter image description here

希望这对某人有用...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接