Asp.net 如何防止Visual Studio 2005';s";“干净”;删除第三方二进制文件的命令?

Asp.net 如何防止Visual Studio 2005';s";“干净”;删除第三方二进制文件的命令?,asp.net,visual-studio,visual-studio-2005,sitecore,Asp.net,Visual Studio,Visual Studio 2005,Sitecore,我正在开发一个Sitecore/ASP.NET项目。今天,在某个时候,我无意中点击了解决方案上下文菜单中的“Clean”选项。我花了一段时间才弄明白为什么我的网站被彻底破坏了。结果表明Visual Studio继续并从\bin目录中删除了几个不属于我的项目的必需程序集 我怎样才能防止这种情况再次发生 奇怪的是,它没有删除所有内容。。。就一小把。它留下了许多我的项目没有直接引用的内容。这让我想知道这个功能到底应该做什么?有什么我可以设置的文件标志吗?所有文件均未设置为只读。如果您对详细信息感兴趣,

我正在开发一个Sitecore/ASP.NET项目。今天,在某个时候,我无意中点击了解决方案上下文菜单中的“Clean”选项。我花了一段时间才弄明白为什么我的网站被彻底破坏了。结果表明Visual Studio继续并从\bin目录中删除了几个不属于我的项目的必需程序集

我怎样才能防止这种情况再次发生

奇怪的是,它没有删除所有内容。。。就一小把。它留下了许多我的项目没有直接引用的内容。这让我想知道这个功能到底应该做什么?有什么我可以设置的文件标志吗?所有文件均未设置为只读。如果您对详细信息感兴趣,将删除以下内容:

Sitecore.Analytics.dll
Sitecore.Client.XML
Stimulsoft.Base.dll
Stimulsoft.Report.dll
Stimulsoft.Report.Web.dll
Stimulsoft.Report.WebDesign.dll
Telerik.Web.UI.dll


更新:你知道。。。我想我在这里真正感兴趣的是为什么Visual Studio保留了大部分文件,只删除了这些特定的文件。

我相信如果将这些文件放在bin以外的子目录中,Visual Studio不会删除它们。您仍然可以将新的子目录作为部署的一部分。

将DLL放在其他目录中。您可能不希望将它们作为项目的一部分。从新目录中引用DLL。编译时,DLL将复制到bin目录

我处理很多项目,并在项目的根目录中保留一个bin目录来存储第三方DLL,正是出于这个原因

目录结构示例:

MyProjects - bin - 3rdParty.dll - Project1 - Project2 - ProjectN 我的项目 -垃圾箱 -第三方.dll -项目1 -项目2 -项目 这允许所有项目都有第三方dll的已知参考位置,而无需将dll复制到每个项目中


如果您在一个团队中工作,那么您应该就代码的标准目录结构达成一致。这将为您省去除此之外的许多麻烦。

对于Sitecore,只需确保设置引用的属性(Sitecore.Kernel、Sitecore.Client等):
“Copy Local”=false。

问题的正确答案取决于引用程序集的方式以及如何将它们包含在项目输出中

项目生成的
bin
obj
文件夹最好被视为“输出”文件夹;这些文件夹应仅包含由项目生成生成的文件

执行项目清理或重建时,将从这些文件夹中删除所有中间文件和编译文件

你应该对这种情况感到放心。

您应该能够通过随时运行生成过程来恢复这些文件夹。如果您直接将文件添加到这些文件夹中,则会破坏这些文件夹的用途,意味着您应该重新考虑如何添加这些文件

引用已编译程序集的首选方法是将它们添加到源文件夹中的某个位置。从那里,它们可以像任何其他文件一样轻松地添加到源代码管理系统中,并且可以被依赖于它们的项目引用/复制。在我的工作中,我们有一个“Libraries”文件夹,其中包含许多由解决方案层次结构中的多个项目引用的第三方程序集

尝试使用如下源代码树,看看它是否适合您:

  • /项目/我的解决方案/
  • /项目/我的解决方案/库/
  • /项目/我的解决方案/项目A/
  • /项目/我的解决方案/项目B/

我们总是在包含Sitecore的项目文件中添加后期构建事件

<Target Name="AfterBuild">
    <CreateItem Include="$(SolutionDir)\Third Party\Sitecore\*.*">
      <Output TaskParameter="Include" ItemName="FilesToArchive" />
    </CreateItem>
    <Copy SourceFiles="@(FilesToArchive)" DestinationFolder="$(TargetDir)\%(FilesToArchive.RecursiveDir)" />
  </Target>


CreateItem Include是放置Sitecore二进制文件的路径。

好吧,我将继续回答我自己的问题,因为这似乎是迄今为止最简单的答案。我将有问题的程序集标记为只读。现在它们没有被清洗


仍然想知道为什么其他大多数没有被删除。

Hero。。。你的回答表面上是有道理的。。。至少,这可能是VisualStudio的行为方式。但显然不是这样,因为clean/rebuild在bin目录中留下了大量其他DLL,这些DLL不是我的项目构建或引用的。我的项目按照Sitecore的建议进行设置。如果手动删除
bin
目录并执行重建,结果会是什么?灾难。Sitecore建议您的项目根目录是网站的根目录。。。它已将许多DLL安装到\bin目录中。删除bin dir将删除所有这些内容并销毁您的web应用程序。我逐渐意识到默认的Sitecore项目设置已被破坏。你是对的,我应该能够删除整个bin dir并从头开始重建。是的,如果我的项目实际引用了这些DLL,而我没有使用ASP.NET应用程序,这将非常有效。这不是删除bin文件夹中的所有内容吗?肯定不是。大多数Sitecore二进制文件(由安装程序放置)保持不变。在被删除的文件中,它们都是项目的输出,还是作为项目的依赖项引用的?绝对不是项目的输出。一个在web.config中引用(不是项目引用),其他则不是。我不知所措。这位好先生是您的答案,Sitecore文档和培训人员会给出答案。+1用于谨慎使用msbuild。不过,您可能需要添加一些关于将此配置放在何处的详细信息:)