diff --git a/build/_k-generate-projects.shade b/build/_k-generate-projects.shade
index 07b9048535..5b45b90f7c 100644
--- a/build/_k-generate-projects.shade
+++ b/build/_k-generate-projects.shade
@@ -225,21 +225,26 @@ functions
const string contentTemplate = @"";
// Build the list of resx files
- var resxFileNames = FindFilesOfType(projectDir, "*.resx");
+ var resxFileNames = Files.Include(Path.Combine(projectDir, "**", "*.resx"));
var resxDesignerFiles = new HashSet(resxFileNames.Select(f => Path.ChangeExtension(f, "Designer.cs")),
StringComparer.OrdinalIgnoreCase);
var resxFiles
= String.Join(Environment.NewLine,
- resxFileNames.Select(p => String.Format(resxTemplate, p, projectName, Path.GetFileNameWithoutExtension(p))));
+ resxFileNames.Select(p => String.Format(resxTemplate, Path.Combine("..", "..", p), projectName, Path.GetFileNameWithoutExtension(p))));
- // Build the list of cs files
- var csFiles
- = String.Join(Environment.NewLine,
- FindFilesOfType(projectDir, "*.cs")
- .Select(p => resxDesignerFiles.Contains(p)
- ? String.Format(resxDesignerTemplate, p, Path.GetFileNameWithoutExtension(p).Replace(".Designer", ""))
- : String.Format(csTemplate, p)));
+ var sourcePattern = Get(d, "code") ?? @"**\*.cs";
+ var sourceExcludePattern = Get(d, "exclude") ?? "";
+ var objPath = Path.Combine(projectDir, "obj");
+ var objPattern = Directory.Exists(objPath) ? Path.Combine(objPath, "**", "*.*") : projectDir;
+
+ var csFiles = String.Join(Environment.NewLine, Files.Include(Path.Combine(projectDir, sourcePattern))
+ .Exclude(Path.Combine(projectDir, sourceExcludePattern))
+ .Exclude(objPattern)
+ .Select(p => resxDesignerFiles.Contains(p)
+ ? String.Format(resxDesignerTemplate, Path.Combine("..", "..", p), Path.GetFileNameWithoutExtension(p).Replace(".Designer", ""))
+ : String.Format(csTemplate, Path.Combine("..", "..", p))));
+
var contentFileExtensions = new [] {
"*.cshtml",