我正在开发一个 TFS 项目,以前的开发人员已将所有内容都包含在源代码控制中 - 包括bin
andobj
文件夹。
当我尝试构建解决方案时,我收到了一些错误,因为bin
andobj
文件夹中的所有文件都被锁定为只读。
由于我无法控制的原因,必须在 TFS 中跟踪这些文件夹。当我尝试构建项目并因为这些文件夹被锁定而出现错误时,我还能如何解决这些问题?
如何在不每次都检查这些文件夹的情况下构建解决方案?
我正在开发一个 TFS 项目,以前的开发人员已将所有内容都包含在源代码控制中 - 包括bin
andobj
文件夹。
当我尝试构建解决方案时,我收到了一些错误,因为bin
andobj
文件夹中的所有文件都被锁定为只读。
由于我无法控制的原因,必须在 TFS 中跟踪这些文件夹。当我尝试构建项目并因为这些文件夹被锁定而出现错误时,我还能如何解决这些问题?
如何在不每次都检查这些文件夹的情况下构建解决方案?
不要将obj
andbin
文件夹添加到源代码管理中。要从 TFS 中删除它们,请在 Visual Studio 中打开源代码管理资源管理器,只需右键单击文件夹并选择“删除”。
如果您无法删除它们,那么您应该询问对 TFS 有控制权的人。我看不出有任何理由将这些文件夹添加到 TFS,所以它不应该是“约束”。
如前所述,没有理由将 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>
Yon 可以使用 powershell 递归删除 bin 和 obj 文件夹。
Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
这是一个非技术性的建议。由于其他人为您创建了此问题,因此将其作为他们的问题。告诉他们,以及其他任何重要的人,你不能建造,这是因为他们做了什么。他们破坏了建筑;他们应该修复它。这里建议的所有技术变通方法都很好,但它们实际上只是绕过了真正的问题。