TFS Build Workflow Изменить атрибуты папки / файла с «Только чтение» на «Чтение / запись»? - PullRequest
1 голос
/ 16 июля 2011

В одном из наших веб-приложений требуется, чтобы некоторые HTML-страницы были доступны для редактирования в графическом интерфейсе, который мы создали для пользователя.К сожалению, интерфейс напрямую читает / пишет со страницы на сервере (также в wwwroot).Другая страница на сервере читает его и просто отображает.

То, что я сейчас сделал, изменило весь наш процесс сборки, так что больше ничего не происходит вручную, и теперь я использую рабочий процесс сборки с TFS / VS 2010это хорошо.

Но TFS автоматически переводит все в режим только для чтения при развертывании кода.

Есть ли способ программно (на любом этапе процесса) изменитьатрибуты папки / файла от только для чтения до чтения-записи, чтобы веб-интерфейс по-прежнему работал правильно?

Ответы [ 2 ]

3 голосов
/ 16 июля 2011

Как насчет добавления пользовательского кода, который запускается после развертывания, чтобы обновить атрибуты файлов, а не FileAttributes.Normal? Это действие должно выполняться на контроллере в конце сборки.

Возможно, вы захотите проверить серию Ewald Hofman. Ваша учетная запись службы сборки, скорее всего, будет иметь правильные разрешения для обновления атрибутов развернутого файла.

Надеюсь, это поможет.

1 голос
/ 27 июля 2011

Я столкнулся с этим и предположил, что это также связано с этим вопросом.

То, что предлагает @Duat, сработало для меня в рамках сервера Build-Agent. Тем не менее, в своем другом вопросе вы упомянули сетевой диск - так что я предполагаю, что вы говорите о файлах, находящихся в месте размещения вашей сборки или на целевом компьютере, где MSBuild / MSDeploy развертывает ваше решение.

Я продвинусь с первым допущением (поэтому мы сосредоточимся на месте отбрасывания), но оно должно быть аналогичным, чтобы справиться с этим вопросом в любом случае.
Идея основана на стратегически размещенной «копии». («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 в вашем решении для сборки, это изменить определение вашей сборки с этого
enter image description here
в нечто подобное
enter image description here

Файл в MakeFileWriteable должен быть внутри BuildAgent и является FROMFILE в InvokeProcess, который следующим образом:
enter image description here
TOFILE - это место, где должен находиться файл.
Не забудьте установить в аргументах "/ Y", так как вы будете перезаписывать файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...