我正在开发一个TFS项目,以前的开发人员已将所有内容都包含在源代码管理中 - 包括bin
和obj
文件夹。
当我尝试构建解决方案时,我收到一些错误,因为bin
和obj
文件夹中的所有文件都被锁定为只读。
由于我无法控制的原因,必须在TFS中跟踪这些文件夹。如果我尝试构建项目并因为这些文件夹被锁定而导致错误,我还能如何解决问题?
如何构建解决方案而不必每次都检查这些文件夹?
答案 0 :(得分:8)
不要将obj
和bin
文件夹添加到源代码管理中。要从TFS中删除它们,请在Visual Studio中打开Source Control Explorer,只需右键单击文件夹并选择“删除”。
如果您无法删除它们,那么您应该询问控制TFS的人。我没有看到任何理由将这些文件夹添加到TFS,因此它不应该是“约束”。
答案 1 :(得分:3)
如前所述,没有理由在源代码管理中包含bin和obj文件夹,其内容是易失性的。
但是如果你真的无法控制它,你只需要使相应的文件夹和文件可写,这样它们就可以被覆盖,或者在使它们可写之后删除bin和obj文件夹。这是相对直接的,有几种方法可以实现它,并且需要更改TFSBuild.proj文件以进行适当的构建。
要使特定文件可写,请使用:
<Attrib Files="[path to your file]" ReadOnly="False"></Attrib>
为了使整个文件夹的内容可写,请使用批处理获取文件列表,然后使用attrib
任务迭代它们:
<Target Name="MakeFilesWriteable">
<Attrib Files="@(TargetFiles)" ReadOnly="false" />
</Target>
<ItemGroup>
<TargetFiles Include="[path to bin folder]\**\*.*" />
</ItemGroup>
或者,您可以在bin文件夹上执行删除:
<RemoveDir Condition="Exists('[path to bin folder]')" Directories="[path to bin folder]" />
除了批处理示例之外,这些任务可以直接放在build proj文件的BeforeCompileSolution
覆盖目标中;对于批处理示例,您只需执行一个调用目标。选择并选择您要使用的方法,然后您的BeforeCompileSolution
将如下所示:
<Target Name="BeforeCompileSolution" >
<CallTarget Targets="MakeFilesWriteable" />
<Attrib Files="[path to your file]" ReadOnly="False"></Attrib>
<RemoveDir Condition="Exists('[path to bin folder]')" Directories="[path to bin folder]" />
</Target>
答案 2 :(得分:2)
Yon可以使用powershell删除bin&amp; obj文件夹递归。
Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
答案 3 :(得分:2)
这是一个非技术性的建议。由于其他人为您创建了此问题,请将其问题解决。告诉他们,以及任何重要的人,你无法建立,这是因为他们所做的。他们打破了建筑;他们应该解决它。这里提出的所有技术解决方案都很好,但它们确实只是避开了真正的问题。
答案 4 :(得分:0)
我在TFS中添加了100个带有Bin和Obj的项目,删除所有项目的最短方法是什么。删除每个都需要很长时间。