Skip to content

Commit f372442

Browse files
committed
Adding nuget fallback folder config
1 parent 6a1207f commit f372442

File tree

5 files changed

+44
-2
lines changed

5 files changed

+44
-2
lines changed

src/WebJobs.Script.WebHost/WebJobsServiceCollectionExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public static IServiceProvider AddWebJobsScriptHost(this IServiceCollection serv
9393
builder.Register<IExtensionsManager>(c =>
9494
{
9595
var hostInstance = c.Resolve<WebScriptHostManager>().Instance;
96-
return new ExtensionsManager(hostInstance.ScriptConfig.RootScriptPath, hostInstance.Logger);
96+
return new ExtensionsManager(hostInstance.ScriptConfig.RootScriptPath, hostInstance.Logger, hostInstance.ScriptConfig.NugetFallBackPath);
9797
});
9898

9999
// The services below need to be scoped to a pseudo-tenant (warm/specialized environment)

src/WebJobs.Script/BindingExtensions/ExtensionsManager.cs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@ public class ExtensionsManager : IExtensionsManager
2525
{
2626
private readonly string _scriptRootPath;
2727
private readonly ILogger _logger;
28+
private string _nugetFallbackPath;
2829

29-
public ExtensionsManager(string scriptRootPath, ILogger logger)
30+
public ExtensionsManager(string scriptRootPath, ILogger logger, string nugetFallbackPath = null)
3031
{
3132
_scriptRootPath = scriptRootPath;
3233
_logger = logger;
34+
_nugetFallbackPath = nugetFallbackPath;
3335
}
3436

3537
internal string ProjectPath => Path.Combine(_scriptRootPath, ExtensionsProjectFileName);
@@ -130,6 +132,7 @@ internal virtual Task ProcessExtensionsProject(string projectFolder)
130132
}
131133

132134
SetupProcessEnvironment(startInfo);
135+
ApplyNugetFallbackFolderConfiguration(startInfo);
133136

134137
var process = new Process { StartInfo = startInfo };
135138
process.ErrorDataReceived += (s, e) => logBuilder.Append(e.Data);
@@ -185,6 +188,30 @@ private void SetupProcessEnvironment(ProcessStartInfo startInfo)
185188
}
186189

187190
startInfo.EnvironmentVariables.Add("DOTNET_SKIP_FIRST_TIME_EXPERIENCE", "true");
191+
startInfo.EnvironmentVariables.Add(NugetXmlDocModeSettingName, NugetXmlDocSkipMode);
192+
}
193+
194+
private void ApplyNugetFallbackFolderConfiguration(ProcessStartInfo startInfo)
195+
{
196+
string nugetFallbackFolderRootPath = Path.Combine(Environment.ExpandEnvironmentVariables("%programfiles(x86)%"), NugetFallbackFolderRootName);
197+
if (string.IsNullOrEmpty(_nugetFallbackPath) && FileUtility.DirectoryExists(nugetFallbackFolderRootPath))
198+
{
199+
_nugetFallbackPath = FileUtility.EnumerateDirectories(nugetFallbackFolderRootPath)
200+
.Select(directoryPath =>
201+
{
202+
var directoryName = FileUtility.DirectoryInfoFromDirectoryName(directoryPath).Name;
203+
Version.TryParse(directoryName, out Version version);
204+
return new Tuple<string, Version>(directoryPath, version);
205+
})
206+
.Where(p => p.Item2 != null)
207+
.OrderByDescending(p => p.Item2)
208+
.FirstOrDefault().Item1?.ToString();
209+
}
210+
211+
if (FileUtility.DirectoryExists(_nugetFallbackPath))
212+
{
213+
startInfo.Arguments += $" /p:RestoreFallbackFolders=\"{_nugetFallbackPath}\"";
214+
}
188215
}
189216

190217
private Exception CreateRestoreException(StringBuilder logBuilder, Exception innerException = null)

src/WebJobs.Script/Config/ScriptHostConfiguration.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ public ScriptHostConfiguration()
3434
/// </summary>
3535
public string RootScriptPath { get; set; }
3636

37+
/// <summary>
38+
/// Gets or sets NugetFallBackPath
39+
/// </summary>
40+
public string NugetFallBackPath { get; set; }
41+
3742
/// <summary>
3843
/// Gets or sets the root path for log files.
3944
/// </summary>

src/WebJobs.Script/Host/ScriptHost.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1494,6 +1494,12 @@ internal static void ApplyConfiguration(JObject config, ScriptHostConfiguration
14941494
}
14951495
}
14961496

1497+
JToken nugetFallbackFolder = config["nugetFallbackFolder"];
1498+
if (nugetFallbackFolder != null && nugetFallbackFolder.Type == JTokenType.String)
1499+
{
1500+
scriptConfig.NugetFallBackPath = (string)nugetFallbackFolder;
1501+
}
1502+
14971503
// Apply Singleton configuration
14981504
JObject configSection = (JObject)config["singleton"];
14991505
JToken value = null;

src/WebJobs.Script/ScriptConstants.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ public static class ScriptConstants
8282
public const string HttpMethodConstraintName = "httpMethod";
8383
public const string Snapshot = "snapshot";
8484
public const string Runtime = "runtime";
85+
public const string NugetFallbackFolderRootName = "FuncNuGetFallback";
86+
public const string NugetXmlDocModeSettingName = "NUGET_XMLDOC_MODE";
87+
public const string NugetXmlDocSkipMode = "skip";
88+
8589

8690
public const int MaximumHostIdLength = 32;
8791
public const int DynamicSkuConnectionLimit = 50;

0 commit comments

Comments
 (0)