Including Empty Directory While Deploying a Web Application
גיל התלונן ובצדק שכשעושים Deploy ל - WebApplication זה לא מכיל את התיקיות הריקות, והוא הציע להוסיף קובץ טקסט ריק,
אני מניח שכל מי שעבד בעולם ה - web נתקל בבעייה המעצבנת הזו, ולכן החלטתי אחת ולתמיד לפתור את זה.
פוסט זה מכיל הוראות כיצד לשנות את ההגדרות של ה- publish המוגדר בסביבת העבודה, הקוד לא עבר QA מקיף ולכן השינויים הם באחריות המשתמש.
public class CopyEmptyFolder : Task
{
public string ProjectFile { get; set; }
public string OutputFolder { get; set; }
public override bool Execute()
{
XDocument document = XDocument.Load(ProjectFile);
var folders = (from element in document.DescendantNodes().OfType<XElement>()
where element.Name.LocalName == "Folder"
select Path.Combine(OutputFolder, element.Attribute("Include").Value)).ToList();
foreach (var item in folders)
{
if (!Directory.Exists(item))
Directory.CreateDirectory(item);
}
return true;
}
}
המחלקה יודעת לקבל את שם קובץ הפרוייקט
בעזרת Linq to Xml אני מוציא את כל התיקיות המוגדרות בפרוייקט,
ולאחר מכן אני יוצר אותם בתיקייה שנוצרת לפני ה - publish.
אחר שהורדתם מקמו אותה בנתיב הבא: C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web
באותה תיקייה קיים קובץ בשם Microsoft.Web.Publishing.targets פתחו אותו,
בהתחלת הקובץ יש הגדרה של כל ה - targets, הוסיפו את השורה הבאה
<UsingTask TaskName="CopyEmptyFolder" AssemblyFile="CustomTasks.dll"/>
כעת חפשו task בשם CopyAllFilesToSingleFolderForPackage (אצלי יושב בשורה מספר 1944) בסוף ה task הוסיפו את השורה הבאה
<CopyEmptyFolder ProjectFile="$(ProjectPath)" OutputFolder="$(_PackageTempDir)"></CopyEmptyFolder>
כעת לאחר publish (ל - File System) כל התיקיות יועתקו.