【问题标题】:TFS Build Workflow Change Folder/File Attributes From Read-Only to Read/Write?TFS 构建工作流将文件夹/文件属性从只读更改为读/写?
【发布时间】:2011-10-06 12:08:00
【问题描述】:

在我们的一个 Web 应用程序中,要求某些 HTML 页面在我们为用户创建的 GUI 界面中是可编辑的。不幸的是,该接口直接从服务器上的页面读取/写入(也在 wwwroot 中)。服务器上的另一个页面从中读取并显示它。

我现在所做的是改变了我们的整个构建过程,因此不再需要手动操作,我现在正在使用 TFS/VS 2010 的构建工作流程,这很好。

但 TFS 在部署代码时会自动将所有内容置于只读模式。

有没有办法以编程方式(在过程中的任何步骤)将文件夹/文件的属性从只读更改为读写,以便 Web 界面仍然正常工作?

【问题讨论】:

    标签: .net tfs workflow tfsbuild


    【解决方案1】:

    如何添加一个在部署后运行的自定义代码活动以将文件的attributes 更新为不是 FileAttributes.Normal?这个活动应该在构建结束时在控制器上运行。

    您可能想查看 Ewald Hofman 的 series 构建自定义。您的构建服务帐户可能具有更新已部署文件属性的正确权限。

    希望这会有所帮助。

    【讨论】:

    • 这正是我们在过去某个时候所做的。我们从this 获得了编写实际活动的帮助
    • 不需要自定义活动。例如,在构建模板中使用“-r /s *”执行“attrib”命令就足够了。
    【解决方案2】:

    我碰到this 并假设它也与这个问题有关。

    在 Build-Agent 服务器的范围内,@Duat 的建议对我有用。然而,在你的另一个问题中,你提到了一个网络驱动器 - 所以我想你是在谈论驻留在构建的放置位置或 MSBuild/MSDeploy 部署你的解决方案的目标计算机上的文件。

    我将继续第一个假设(因此,我们将专注于放置位置),但在任何一种情况下处理问题都应该类似。
    这个想法基于战略性放置的“xcopy”。 (默认情况下,'xcopy' 在执行期间将所有文件属性重置为读写)
    第一步是构建一个自定义活动,将您需要的文件设置为读写。活动的快速初稿可以是这样的(它旨在更改文件的属性,而不是目录):

    namespace BuildTasks.Activities
    {
        using System;
        using System.Activities;
        using System.IO;
        using Microsoft.TeamFoundation.Build.Client;
    
        [BuildActivity(HostEnvironmentOption.Agent)]
        public sealed class MakeFileWriteable : CodeActivity
        {
            [RequiredArgument]
            public InArgument<string> FilePath
            {
                get;
                set;
            }
    
            protected override void Execute(CodeActivityContext context)
            {
                String filePath = FilePath.Get(context);
    
                //add exception handling 
    
                FileAttributes fileAttributes = File.GetAttributes(filePath);
                File.SetAttributes(filePath, fileAttributes & ~FileAttributes.ReadOnly);
            }
        }
    }
    

    第二步,现在一旦您在构建解决方案中添加了MakeFileWritable,就是将您的构建定义从这个

    更改为类似的内容

    MakeFileWriteable 中的文件应该来自 BuildAgent,并且是 InvokeProcess 中的 FROMFILE,如下:

    TOFILE 是文件所在的位置。
    请记住在参数中设置“/Y”,因为您将覆盖文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-07
      • 2014-07-31
      • 2018-09-10
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多