我有问题。我正在使用Team Foundation Server 2017 RTM。我有一个构建定义,将我的应用程序部署到运行Windows Server 2012 R2的开发服务器。我的应用程序允许用户上传图像和PDF。完成此操作后,将在项目的根目录中创建名为Media的文件夹,并在此处上载文件。问题是,每当我对新版本进行排队时,此文件夹都会被销毁,并且所有指向媒体的链接都不会指向任何内容。我是管理和设置TFS的新手,所以我想知道是否有任何方法可以在我排队新构建时保留媒体文件夹的内容。有任何想法吗?
答案 0 :(得分:1)
好的,所以我整天都在看这个。
在我的C#代码中,我创建了一个如下目录:
// -- Create a new file name that is unique
string fileExtension = Path.GetExtension(upload.FileName);
Guid fileGuid = Guid.NewGuid();
string fileName = fileGuid + fileExtension;
// -- Create the directory and upload the image to that directory
string mediaDirectory = Server.MapPath("~/Media/");
Directory.CreateDirectory(mediaDirectory);
string filePath = Path.Combine(mediaDirectory, fileName);
upload.SaveAs(filePath);
然后我会在Media对象上设置图片网址,如:
string imageUrl = "/Media/" + fileName;
现在,我不是将图像存储在数据库中,而是将URL存储到图像中。
这是在app目录中创建我可以存储文件的目录:
这很酷,但正如我所提到的,每次排队新版本时都会销毁此目录。我如何解决这个问题是为了修改我存储图像的位置:
// -- Create a new file name that is unique
string fileExtension = Path.GetExtension(upload.FileName);
Guid fileGuid = Guid.NewGuid();
string fileName = fileGuid + fileExtension;
// -- Create the directory and upload the image to that directory
// The Media directory will be created on the C drive root
string mediaDirectory = @"c:\Media";
Directory.CreateDirectory(mediaDirectory);
string filePath = Path.Combine(mediaDirectory, fileName);
upload.SaveAs(filePath);
现在我的Media文件夹是在服务器的C盘上创建的,每当我排队新的版本时都不会销毁它。由于应用程序无法访问app目录之外的文件,因此我需要一种方法来访问Media目录中的这些文件。我所做的是在IIS中创建一个新的虚拟文件夹,指向Media文件夹并为其指定别名Media:
现在,我可以访问我放在Media目录中的所有文件,并在需要时正确显示图像。我真的希望这对某人有所帮助,因为我花了太长时间看这个。
答案 1 :(得分:0)
根据您的描述,构建代理中有一个工作目录的概念。如果您在构建定义中set clean=true,则在查询新构建时将删除以前的构建输出。不确定Media文件夹的位置,避免在构建代理程序的某些目录中创建/放置它,例如Build.ArtifactStagingDirectory
代理上的任何工件复制到之前的本地路径 被推到目的地。例如:c:\ agent_work \ 1 \ a。
使用此文件夹的典型方法是发布构建工件 使用复制文件和发布构建工件步骤。
注意:此目录在每次新构建之前都已清除,因此您无需自行清理。
有关构建/发布中文件夹路径的更多详细信息,您可以参考本教程 - Predefined variables