在我们的一个Web应用程序中,需要在我们为用户创建的GUI界面中编辑某些HTML页面。不幸的是,接口直接从服务器上的页面读取/写入(也在wwwroot中)。服务器上的另一个页面从中读取并显示它。
我现在所做的是改变了我们的整个构建过程,以便不再需要手动操作,我现在正在使用TFS / VS 2010构建工作流程,这很不错。
但是TFS在部署代码时会自动将所有内容置于只读模式。
有没有办法以编程方式(在过程的任何一步),将文件夹/文件的属性从只读更改为读写,以便Web界面仍能正常工作?
答案 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
之后,第二步是从此更改构建定义
进入这样的事情
MakeFileWriteable
中的文件应该来自BuildAgent,并且是后面的InvokeProcess中的FROMFILE:
TOFILE是文件应该着陆的位置。
记住在参数中设置“/ Y”,因为你将覆盖文件。