Len*_*y D 5 c# azure json.net azure-functions
这真让我抓狂.我使用Newtonsoft.Json获取Azure函数的加载错误.
这是一个.netstandard2.0项目,我安装了11.0.2版本.我已经浏览过网络,其他大多数人都使用旧版本的Microsoft.NET.Sdk.Functions:1.0.13但我使用的是1.0.14
请参阅下面的项目文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AzureFunctionsVersion>v2</AzureFunctionsVersion>
<RootNamespace>modoapi</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Autofac" Version="4.2.1" />
<PackageReference Include="Microsoft.Azure.WebJobs" Version="3.0.0-beta5" />
<PackageReference Include="Microsoft.Azure.WebJobs.ServiceBus" Version="3.0.0-beta5" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.14" />
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
我查看了我的项目的所有依赖项,他们都指向Newtonsoft.Json 11.0.2.
该文件存在于我的输出bin文件夹中.我已经清理了解决方案.已更新至最新的VS和Azure功能以及WebJobs工具15.0.40608.0
功能应用程序启动正常,但是当我向队列添加消息以调用触发器时,我在控制台中收到以下错误.
[12/07/2018 10:56:36]执行'ExecuteWorkItem'(失败,Id = 6d87f5e9-c331-4934-a3f3-b9bebf756b54)[12/07/2018 10:56:36] System.Private.CoreLib:异常执行函数时:ExecuteWorkItem.test-api:无法加载文件或程序集'Newtonsoft.Json,Version = 11.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'.无法找到或加载特定文件.(来自HRESULT的异常:0x80131621).System.Private.CoreLib:无法加载文件或程序集'Newtonsoft.Json,Version = 11.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'.
这是我的功能的签名
public static class ExecuteWorkItem
{
[FunctionName("ExecuteWorkItem")]
public static async Task Run(
[QueueTrigger("work-item")]string queueItem,
TraceWriter log,
ExecutionContext executionContext,
[Inject(typeof(IWorkItemEngine))]IWorkItemEngine workItemEngine,
[Table("ResultData", Connection = "AzureWebJobsStorage")] CloudTable resultTable,
[Table("SimulationNodeData", Connection = "AzureWebJobsStorage")] CloudTable simulationNodeTable)
{}
Run Code Online (Sandbox Code Playgroud)
任何想法现在都会非常感激,唯一似乎有类似问题的人是这里的人: 去他的帖子的底部
他没有回复他的查询,他在Mac环境中,而我在Windows 10上.
任何帮助将非常感激.
提前致谢
对于v2函数,函数sdk 1.0.14默认引用Newtonsoft.Jon v11.0.2,不需要显式引用它,与Microsoft.Azure.WebJobs相同.问题是关于VS使用的功能核心工具(CLI).
在本地调试时检查此行的CLI输出.
Starting Host (HostId=xx, InstanceId=xxx, Version=2.0.11651.0, ...)
Run Code Online (Sandbox Code Playgroud)
如果您Version=2.0.11651.0确切地看到,则表示您的VS正在使用旧版本的CLI.
实际上,最新版本的Azure功能和Web作业工具(在VS菜单上,工具>扩展和更新)是15.0.40617.0.此版本使用最新的CLI(主机版本2.0.11888),其中v11 Json.Net得到了很好的支持.更新此扩展可能会解决您的问题.
似乎Visual Studio for Mac仍然利用旧的CLI(主机版本2.0.11651),Mac用户可以使用Homebrew下载新的功能核心工具并func start在内容根路径中运行.或者切换更新频道以将其VS更新为最新/预览版本.