Skip to content

Commit 6190f61

Browse files
authored
Merge pull request #4138 from olivercoad/fix-unauthorizedaccessexception
Fix exception when searching for config file
2 parents c11f258 + ad8809a commit 6190f61

File tree

2 files changed

+18
-17
lines changed

2 files changed

+18
-17
lines changed

src/Paket.Core/Installation/BindingRedirects.fs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,17 +83,6 @@ let internal indentAssemblyBindings config =
8383
if not parent.HasElements then
8484
parent.Remove()
8585

86-
let private configFiles = [ "app"; "web" ] |> Set.ofList
87-
let private projectFiles = [ ".csproj"; ".vbproj"; ".fsproj"; ".wixproj"; ".nproj"; ".vcxproj"; ".pyproj"; ".sfproj"; ".sqlproj" ] |> Set.ofList
88-
let private toLower (s:string) = s.ToLower()
89-
let private isAppOrWebConfig =
90-
configFiles.Contains << (fun (x : string) -> Path.GetFileNameWithoutExtension(x) |> toLower)
91-
92-
let internal getConfig getFiles directory =
93-
getFiles(directory, "*.config", SearchOption.AllDirectories)
94-
|> Seq.tryFind isAppOrWebConfig
95-
96-
9786
let private baseConfig = """<?xml version="1.0" encoding="utf-8"?>
9887
<configuration>
9988
</configuration>
@@ -181,8 +170,8 @@ let applyBindingRedirectsToFolder isFirstGroup createNewBindingFiles cleanBindin
181170
let applyBindingRedirects projectFile =
182171
let bindingRedirects = bindingRedirects projectFile |> Seq.toList
183172
let path = Path.GetDirectoryName projectFile.FileName
184-
match getConfig Directory.GetFiles path with
185-
| Some c -> Some c
173+
match projectFile.TryFindConfigFile() with
174+
| Some c -> Some c.FullName
186175
| None ->
187176
match createNewBindingFiles, List.isEmpty bindingRedirects with
188177
| true, false ->

src/Paket.Core/PaketConfigFiles/ProjectFile.fs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1889,17 +1889,17 @@ type ProjectFile with
18891889

18901890
member this.FindOrCreateReferencesFile() = ProjectFile.FindOrCreateReferencesFile (FileInfo this.FileName)
18911891

1892-
/// Finds all project files
1893-
static member FindAllProjectFiles folder : FileInfo [] =
1892+
// searches directory and all subdirectories for the search pattern, skipping known problematic directories
1893+
static member SearchAllProjectRelatedFiles searchPattern folder : FileInfo [] =
18941894
let paketPath = Path.Combine(folder,Constants.PaketFilesFolderName) |> normalizePath
18951895

18961896
let findAllFiles folder =
18971897
let rec search topLevel (di:DirectoryInfo) =
18981898
try
18991899
if verbose then
1900-
verbosefn "Searching in %s" di.FullName
1900+
verbosefn "Searching %s in %s" searchPattern di.FullName
19011901

1902-
let files = di.GetFiles("*proj*", SearchOption.TopDirectoryOnly)
1902+
let files = di.GetFiles(searchPattern, SearchOption.TopDirectoryOnly)
19031903
di.GetDirectories()
19041904
|> Array.filter (fun di ->
19051905
try
@@ -1934,6 +1934,10 @@ type ProjectFile with
19341934
search true (DirectoryInfo folder)
19351935

19361936
findAllFiles folder
1937+
1938+
/// Finds all project files
1939+
static member FindAllProjectFiles folder : FileInfo [] =
1940+
ProjectFile.SearchAllProjectRelatedFiles "*proj*" folder
19371941
|> Array.filter ProjectFile.isSupportedFile
19381942

19391943
/// Finds all project files
@@ -2112,3 +2116,11 @@ type ProjectFile with
21122116
}
21132117

21142118
(coreInfo, optionalInfo)
2119+
2120+
member self.TryFindConfigFile () =
2121+
let isAppOrWebConfig (fileInfo:FileInfo) =
2122+
let baseName = fileInfo.Name.ToLowerInvariant()
2123+
baseName = "app.config" || baseName = "web.config"
2124+
2125+
ProjectFile.SearchAllProjectRelatedFiles "*.config" (FileInfo self.FileName).DirectoryName
2126+
|> Array.tryFind isAppOrWebConfig

0 commit comments

Comments
 (0)