3

我正在开发一个 TFS 项目,以前的开发人员已将所有内容都包含在源代码控制中 - 包括binandobj文件夹。

当我尝试构建解决方案时,我收到了一些错误,因为binandobj文件夹中的所有文件都被锁定为只读。

由于我无法控制的原因,必须在 TFS 中跟踪这些文件夹。当我尝试构建项目并因为这些文件夹被锁定而出现错误时,我还能如何解决这些问题?

如何在不每次都检查这些文件夹的情况下构建解决方案?

4

4 回答 4

9

不要将objandbin文件夹添加到源代码管理中。要从 TFS 中删除它们,请在 Visual Studio 中打开源代码管理资源管理器,只需右键单击文件夹并选择“删除”。

如果您无法删除它们,那么您应该询问对 TFS 有控制权的人。我看不出有任何理由将这些文件夹添加到 TFS,所以它不应该是“约束”。

于 2012-10-12T13:04:58.703 回答
4

如前所述,没有理由将 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]" />

除了批处理示例,这些任务可以直接放在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>
于 2012-10-14T01:45:29.073 回答
2

Yon 可以使用 powershell 递归删除 bin 和 obj 文件夹。

Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
于 2012-10-12T15:23:00.730 回答
2

这是一个非技术性的建议。由于其他人为您创建了此问题,因此将其作为他们的问题。告诉他们,以及其他任何重要的人,你不能建造,这是因为他们做了什么。他们破坏了建筑;他们应该修复它。这里建议的所有技术变通方法都很好,但它们实际上只是绕过了真正的问题。

于 2014-02-24T14:18:17.033 回答