diff --git a/TestAssets/TestProjects/TestRazorApp/Areas/MyFeature/Pages/Page1.cshtml b/TestAssets/TestProjects/TestRazorApp/Areas/MyFeature/Pages/Page1.cshtml
new file mode 100644
index 000000000..79083e425
--- /dev/null
+++ b/TestAssets/TestProjects/TestRazorApp/Areas/MyFeature/Pages/Page1.cshtml
@@ -0,0 +1,16 @@
+@page
+@model TestRazorApp.MyFeature.Pages.Page1Model
+@{
+ Layout = null;
+}
+
+
+
+
+
+
+ Page1
+
+
+
+
diff --git a/TestAssets/TestProjects/TestRazorApp/Areas/MyFeature/Pages/Page1.cshtml.cs b/TestAssets/TestProjects/TestRazorApp/Areas/MyFeature/Pages/Page1.cshtml.cs
new file mode 100644
index 000000000..583793ac3
--- /dev/null
+++ b/TestAssets/TestProjects/TestRazorApp/Areas/MyFeature/Pages/Page1.cshtml.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+
+namespace TestRazorApp.MyFeature.Pages
+{
+ public class Page1Model : PageModel
+ {
+ public void OnGet()
+ {
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/TestAssets/TestProjects/TestRazorApp/TestRazorApp.csproj b/TestAssets/TestProjects/TestRazorApp/TestRazorApp.csproj
new file mode 100644
index 000000000..59cfc871f
--- /dev/null
+++ b/TestAssets/TestProjects/TestRazorApp/TestRazorApp.csproj
@@ -0,0 +1,11 @@
+
+
+
+
+ netstandard2.0
+
+
+
+
+
+
diff --git a/src/dotnet/BuildServer/BuildServerProvider.cs b/src/dotnet/BuildServer/BuildServerProvider.cs
index e292d854a..bf26fdfad 100644
--- a/src/dotnet/BuildServer/BuildServerProvider.cs
+++ b/src/dotnet/BuildServer/BuildServerProvider.cs
@@ -12,15 +12,19 @@ namespace Microsoft.DotNet.BuildServer
{
internal class BuildServerProvider : IBuildServerProvider
{
+ public const string PidFileDirectoryVariableName = "DOTNET_BUILD_PIDFILE_DIRECTORY";
private readonly IFileSystem _fileSystem;
private readonly IEnvironmentProvider _environmentProvider;
+ private readonly IReporter _reporter;
public BuildServerProvider(
IFileSystem fileSystem = null,
- IEnvironmentProvider environmentProvider = null)
+ IEnvironmentProvider environmentProvider = null,
+ IReporter reporter = null)
{
_fileSystem = fileSystem ?? FileSystemWrapper.Default;
_environmentProvider = environmentProvider ?? new EnvironmentProvider();
+ _reporter = reporter ?? Reporter.Error;
}
public IEnumerable EnumerateBuildServers(ServerEnumerationFlags flags = ServerEnumerationFlags.All)
@@ -59,7 +63,7 @@ namespace Microsoft.DotNet.BuildServer
if ((flags & ServerEnumerationFlags.Razor) == ServerEnumerationFlags.Razor &&
Path.GetFileName(path).StartsWith(RazorPidFile.FilePrefix))
{
- var file = RazorPidFile.Read(new FilePath(path), _fileSystem);
+ var file = ReadRazorPidFile(new FilePath(path));
if (file != null)
{
yield return new RazorServer(file);
@@ -70,7 +74,7 @@ namespace Microsoft.DotNet.BuildServer
public DirectoryPath GetPidFileDirectory()
{
- var directory = _environmentProvider.GetEnvironmentVariable("DOTNET_BUILD_PIDFILE_DIRECTORY");
+ var directory = _environmentProvider.GetEnvironmentVariable(PidFileDirectoryVariableName);
if (!string.IsNullOrEmpty(directory))
{
return new DirectoryPath(directory);
@@ -82,5 +86,22 @@ namespace Microsoft.DotNet.BuildServer
"pids",
"build"));
}
+
+ private RazorPidFile ReadRazorPidFile(FilePath path)
+ {
+ try
+ {
+ return RazorPidFile.Read(path, _fileSystem);
+ }
+ catch (Exception ex) when (ex is IOException || ex is UnauthorizedAccessException)
+ {
+ _reporter.WriteLine(
+ string.Format(
+ LocalizableStrings.FailedToReadPidFile,
+ path.Value,
+ ex.Message).Yellow());
+ return null;
+ }
+ }
}
}
diff --git a/src/dotnet/BuildServer/LocalizableStrings.resx b/src/dotnet/BuildServer/LocalizableStrings.resx
index 8534ae97a..d15e3925a 100644
--- a/src/dotnet/BuildServer/LocalizableStrings.resx
+++ b/src/dotnet/BuildServer/LocalizableStrings.resx
@@ -129,4 +129,7 @@
The shutdown command failed: {0}
+
+ Failed to read pid file '{0}': {1}
+
diff --git a/src/dotnet/BuildServer/RazorPidFile.cs b/src/dotnet/BuildServer/RazorPidFile.cs
index dd8806c9e..f2baa7115 100644
--- a/src/dotnet/BuildServer/RazorPidFile.cs
+++ b/src/dotnet/BuildServer/RazorPidFile.cs
@@ -33,7 +33,13 @@ namespace Microsoft.DotNet.BuildServer
{
fileSystem = fileSystem ?? FileSystemWrapper.Default;
- using (var stream = fileSystem.File.OpenRead(path.Value))
+ using (var stream = fileSystem.File.OpenFile(
+ path.Value,
+ FileMode.Open,
+ FileAccess.Read,
+ FileShare.Write | FileShare.Delete,
+ 4096,
+ FileOptions.None))
using (var reader = new StreamReader(stream, Encoding.UTF8))
{
if (!int.TryParse(reader.ReadLine(), out var processId))
diff --git a/src/dotnet/BuildServer/xlf/LocalizableStrings.cs.xlf b/src/dotnet/BuildServer/xlf/LocalizableStrings.cs.xlf
index 52d049e73..c2d75710c 100644
--- a/src/dotnet/BuildServer/xlf/LocalizableStrings.cs.xlf
+++ b/src/dotnet/BuildServer/xlf/LocalizableStrings.cs.xlf
@@ -22,6 +22,11 @@
The shutdown command failed: {0}
+
+ Failed to read pid file '{0}': {1}
+ Failed to read pid file '{0}': {1}
+
+