如何防止Visual Studio 2005的"清理"命令删除第三方二进制文件?

Bry*_*yan 8 asp.net visual-studio-2005 sitecore visual-studio

我有一个我正在开发的Sitecore/ASP.NET项目.今天在某些时候我无意中点击了解决方案上下文菜单中的"清理"选项.我花了一段时间才弄清楚为什么我的网站被无可救药地打破了.结果是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会丢弃大部分文件而只删除这些特定的文件.

Pau*_*ner 8

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

binobj项目所产生的文件夹,最好视为"输出"文件夹; 这些文件夹应该只包含项目构建生成的文件.

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

你应该感到很舒服.

您应该可以通过随时运行构建过程来还原这些文件夹.如果您直接向这些文件夹添加了文件,则会破坏这些文件夹的用途,这意味着您应该重新考虑如何添加这些文件.

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

尝试使用这样的源代码树,看看它是否适合您:

  • / Projects /我的解决方案/
  • / Projects/My Solution/Libraries /
  • / Projects /我的解决方案/项目A /
  • / Projects/My Solution/Project B /


Bri*_*ian 5

将dll放在不同的目录中.您可能不希望它们作为项目的一部分.引用新目录中的dll.编译时,dll将被复制到bin目录中.

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

示例目录结构:

MyProjects
 - bin
   - 3rdParty.dll
 - Project1
 - Project2
 - ProjectN

这允许所有项目都具有第三方dll的着名参考位置,而无需将dll复制到每个项目中.

如果您正在组建团队,那么您应该就代码的标准目录结构达成一致.除此之外,这将为您节省许多麻烦.


pbe*_*ing 5

我们总是将AfterBuild事件添加到包含Sitecore的项目文件中.

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

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