Я столкнулся с этим и предположил, что это также связано с этим вопросом.
То, что предлагает @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
в вашем решении для сборки, это изменить определение вашей сборки с этого
в нечто подобное
Файл в MakeFileWriteable
должен быть внутри BuildAgent и является FROMFILE в InvokeProcess, который следующим образом:
TOFILE - это место, где должен находиться файл.
Не забудьте установить в аргументах "/ Y", так как вы будете перезаписывать файл.