I am developing a http trigger using azure functions 2.x and dotnet core, after the latest update to VS 2017 15.8.2 I am getting the following error when running the function locally
1/9/2018 13:30:50] Stopping Host
[1/9/2018 13:31:06] Reading host configuration file 'C:\Users\MattDouhan\source\repos\NWMposTransInput\NWMposTransInput\bin\Debug\netstandard2.0\host.json'
[1/9/2018 13:31:06] Host configuration file read:
[1/9/2018 13:31:06] {}
[1/9/2018 13:31:06] Starting Host (HostId=desktop7cks1do-260439321, InstanceId=5fd41a43-b3ca-47e4-adf6-320d40fa9613, Version=2.0.11960.0, ProcessId=13156, AppDomainId=1, Debug=False, ConsecutiveErrors=5, StartupCount=6, FunctionsExtensionVersion=)
[1/9/2018 13:31:07] A ScriptHost error has occurred
[1/9/2018 13:31:07] System.Private.CoreLib: Could not load type 'Microsoft.Azure.WebJobs.Hosting.IWebJobsStartup' from assembly 'Microsoft.Azure.WebJobs.Host, Version=3.0.0.0, Culture=neutral, PublicKeyToken=null'.
[1/9/2018 13:31:07] Stopping Host
I am running Function Core tools 2.0.1-Beta.35 and runtime version 2.0.11960.0
The function looks as follows
using System.IO;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Azure.WebJobs.Host;
using Newtonsoft.Json;
using Microsoft.Extensions.Logging;
using System;
namespace NWMposTransInput
{
public static class Function1
{
[FunctionName("Function1")]
public static IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]
HttpRequest req, ILogger log,
[CosmosDB(
databaseName: "xxxx",
collectionName: "yyyy",
ConnectionStringSetting = "CosmosDbConnection")]out dynamic document,
ILogger log2)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = new StreamReader(req.Body).ReadToEnd();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
document = new { SSourceSystem = "jongelSystem",
id = Guid.NewGuid(),
SSourceSystemVersion = "1.1",
STransactionId = "12345"};
log.LogInformation($"C# Queue trigger function inserted one row");
log.LogInformation($"Description={req.Body}");
return name != null
? (ActionResult)new OkObjectResult($"Hello, {name}")
: new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}
}
public class NWCloudOrder
{
public string Id { get; set; }
public string SSourceSystem { get; set; }
public string SSourceSystemVersion { get; set; }
public string STransactionId { get; set; }
}
}
--- EDIT --- Making sure I use the correct runtime this now produces the following error
[2/9/2018 05:44:15] A ScriptHost error has occurred
[2/9/2018 05:44:15] System.Private.CoreLib: Could not load file or assembly 'Microsoft.AspNetCore.Mvc.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. Could not find or load a specific file. (Exception from HRESULT: 0x80131621). System.Private.CoreLib: Could not load file or assembly 'Microsoft.AspNetCore.Mvc.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.
[2/9/2018 05:44:15] Stopping Host
I do have 2.2.0-preview1-35029 installed
It's caused by referencing Microsoft.Azure.WebJobs.Extensions.CosmosDB
of latest version 3.0.1-beta1/2
in old function runtime 2.0.11960.0
. Microsoft.NET.Sdk.Functions 1.0.19
and Microsoft.Azure.WebJobs.Extensions.CosmosDB 3.0.1-beta2
depends on runtime 2.0.12050.0
.
Check this issue with relevant error info for breaking changes of latest runtime 2.0.12050.0
.
If you don't want to move to latest runtime for now, downgrade Microsoft.Azure.WebJobs.Extensions.CosmosDB
to 3.0.0-beta7
and Microsoft.NET.Sdk.Functions
to 1.0.14
.
Else just make sure VS consumes the latest function runtime 2.0.12050.0
.
On VS menus-> Extensions and Updates. Find Azure Functions and Web Jobs Tools. Make sure it's >= 15.8.5023.(Need to update VS to 15.8 first).
Delete old Function Core tools(Cli) folder %localappdata%\AzureFunctionsTools
.
Restart VS and create a new Azure function. Wait at the creation dialog for VS to download new Cli and templates, until we see the tip change to Updates are ready.
Update
Check Cli output, I am afraid older version 2.0.11651.0 is in use.
Starting Host (HostId=xxx, InstanceId=xxx, Version=2.0.11651.0, ...)
Go to %localappdata%\AzureFunctionsTools\Releases
, you may also see an empty folder 2.5.1
.
The download failed due to some reason like network. Repeat the steps above again. If it doesn't work, try to download Cli manually. Close VS first.
1). Open %localappdata%\AzureFunctionsTools\feed.json
to find latest download url of v2.
2). Rename unzipped folder as cli
, put it under 2.5.1
.
3). Move templates
folder in cli
folder to 2.5.1
.
4). Create a manifest.json under 2.5.1
.(Change your UserName)
{
"ReleaseName": "2.5.1",
"CliEntrypointPath": "C:\\Users\\UserName\\AppData\\Local\\AzureFunctionsTools\\Releases\\2.5.1\\cli\\func.exe",
"TemplatesDirectory": "C:\\Users\\UserName\\AppData\\Local\\AzureFunctionsTools\\Releases\\2.5.1\\templates",
"FunctionsExtensionVersion": "~2",
"SdkPackageVersion": "1.0.19"
}
Function SDK references Microsoft.AspNetCore.Mvc.Abstractions 2.1.0
by design. Remove 2.2.0-preview1-35029
or we may get error when executing.
Microsoft.Azure.WebJobs.Host: Exception binding parameter 'req'. System.Private.CoreLib: Cannot create an abstract class.
User contributions licensed under CC BY-SA 3.0