Asp.net 防止visual studio在重建时从bin/中删除所有内容?

Asp.net 防止visual studio在重建时从bin/中删除所有内容?,asp.net,visual-studio,Asp.net,Visual Studio,我有一个web应用程序项目。我在项目中引用的DLL存储在我的bin/文件夹中。嗯,每当我从VisualStudio重建或清理时,它都会删除该文件夹中的所有内容。如何防止这种情况发生 你能解释一下为什么要先把它存储在bin文件夹中吗?我总是创建一个单独的文件夹,例如/components,在其中存储所有引用的dll。我不会问“为什么”的问题,而只是说明如何。将文件标记为只读,VS不应删除它们。不要自己将任何内容放入垃圾箱。bin是二进制文件的目标文件夹-它不是二进制文件的源文件夹 创建一个lib文

我有一个web应用程序项目。我在项目中引用的DLL存储在我的bin/文件夹中。嗯,每当我从VisualStudio重建或清理时,它都会删除该文件夹中的所有内容。如何防止这种情况发生

你能解释一下为什么要先把它存储在bin文件夹中吗?我总是创建一个单独的文件夹,例如/components,在其中存储所有引用的dll。

我不会问“为什么”的问题,而只是说明如何。将文件标记为只读,VS不应删除它们。

不要自己将任何内容放入垃圾箱。bin是二进制文件的目标文件夹-它不是二进制文件的源文件夹

创建一个
lib
文件夹或类似的东西,将第三方二进制文件放入其中。您甚至可以将其命名为“第三方二进制文件”,因为并非所有人都知道“lib”的含义相同。引用此文件夹中的二进制文件,Visual Studio将在必要时(包括在重建时)将它们复制到
bin

有一件事“不要这样做!”人们忘记了源代码管理和第三方软件。使用SVN,您经常会得到这样的文件:如果使用物理引用,当它们不在同一物理位置时,会产生不匹配

我正在使用的一个CMS在您设置另一个“实例”时预先构建了VS项目和解决方案。它转储到它需要的一些DLL中。。。但如果你重建,它们就会消失


在这两种情况下,简单的解决方案是按照上面所述的方法进行操作,并称之为“完成”。

按照John Saunders的回答,将.dll放入一个单独的文件夹中。在我的例子中,我将这个文件夹命名为“ServerAssembly”。然后修改项目文件(.csproj,在我的例子中)并添加一个“AfterRebuild”目标




idk,bin/对我来说总是有意义的。它是放置可执行二进制文件的地方。将文件移出bin/会导致问题吗?@Earlz,您应该有一个lib目录(有些人也喜欢第三方目录),用于放置引用的程序集。构建脚本应根据需要将这些复制到bin目录,这允许您拥有一个干净的生成。@Paolo:Visual Studio将自动将它们复制到bin,如果它们是从
lib
文件夹引用的。@Earlz:另一个原因
bin
不是一个好主意是
bin
不应该签入源代码管理。应该可以恢复所有“源”文件以进行干净的构建。这永远不会将您的文件包含在
bin
@Paolo中这是我刚开始使用ASP.Net时提出的一个非常古老的问题。现在我用一个
lib
directory来“正确”地做事情,因为我有一些文件,比如不属于我们的控件的程序集、Npgsql和AjaxControlToolkit等。如果从物理位置添加这些程序集(例如C:\MyAssemblys\…),它们仍然存在。当您想将项目部署到另一台计算机上时,如果这些程序集不是系统程序集,则需要在该计算机上注册这些程序集(将它们安装到GAC)。我们不希望必须向GAC注册。bin文件夹旨在作为您生成的项目的二进制文件的输出区域。严格来说,这并不是为部署到客户端而绑定的文件夹。这实际上是该进程的一个单独阶段。我如何证明这一点?例如,如果GAC中存在任何依赖项,VS将不会将其输出到BIN文件夹。这意味着第三方GAC的组件不会打包。我建议捆绑特定DLL的一种方法是将它们添加到项目中,并将它们标记为输出。这将自动将它们推送到bin文件夹。直接签入bin文件夹与VS build process的体系结构相反,根本没有意义。例如,构建代理可自定义此箱子位置。构建工具并不期望您正在实现的过程。-1只是因为您不应该将DLL存储在bin目录中,即使有办法使其工作。这并不意味着我们不应该回答这个问题。让我们把比你更神圣的人留到这样一个辩论合适的地方吧。事实上,我更关心的是,答案是被接受的,并且是得票最多的(当时我否决了它)。您的回答是正确的,这是对给定问题的有效回答。实际上,这可以是一个,因此@JasonBerkan评论,也可以是切中要害的。@billb该问题直接与VS构建过程和构建变量的设计相矛盾。Bin文件夹是指可移植的,并假定由MS工具的几个组件组成。因此,这只是一种可怕的做法,不应予以鼓励。OP应将其流程设计为与所使用的工具内联。对于您不直接引用(我只引用构建时依赖项)但运行项目仍需要的运行时依赖项,该如何处理?完全相同-它们不属于bin@JohnSaunders没错,但它们属于哪里?如果你不引用它们,它们怎么会被扔进垃圾箱呢。还是应该引用运行时依赖项?@wens引用它们是最好的
<Target Name="AfterRebuild">
  <ItemGroup>
    <ExtraAssemblies Include="$(SolutionDir)ServerAssemblies\**\*.*"/>
  </ItemGroup>
  <Copy SourceFiles="@(ExtraAssemblies)" DestinationFolder="$(ProjectDir)bin\"></Copy>
</Target>