TFS构建工作流程将文件夹/文件属性从只读更改为读/写?

时间:2011-07-15 21:38:36

标签: .net tfs workflow tfs2010 tfsbuild

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

希望这有帮助。

答案 1 :(得分:1)

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

@Duat建议在Build-Agent服务器范围内为我工作的内容。然而,在你的另一个问题中,你提到了一个网络驱动器 - 所以我想你正在讨论的是存在于你的构建的放置位置或MSBuild / MSDeploy部署你的解决方案的目标计算机上的文件。 / p>

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

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之后,第二步是从此更改构建定义 enter image description here 进入这样的事情 enter image description here

MakeFileWriteable中的文件应该来自BuildAgent,并且是后面的InvokeProcess中的FROMFILE:
enter image description here
TOFILE是文件应该着陆的位置。
记住在参数中设置“/ Y”,因为你将覆盖文件。