我正在编写一个azure函数来生成JWT令牌并将其返回给客户端。代码在控制台应用程序中进行本地测试,所有似乎都可以正常工作。这是工作控制台应用程序和我的函数应用程序中包含的包参考:
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="5.2.1" />
当使用func host start
在本地运行函数主机并执行代码时,会导致错误:
Could not load file or assembly 'Microsoft.IdentityModel.Tokens, Version=5.2.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'."
我不明白为什么会这样,dll和我的应用程序dll一起放在输出文件夹中。我能想到的唯一另一件事是,函数主机有自己的一套包来源,而且这个包还没有提供,仅在12天前发布。
我不确定。有关为什么会发生这种情况或如何解决问题的任何帮助?
详细说明:
Azure Functions核心工具(2.0.1-beta.22)
函数运行时版本:2.0.11415.0
答案 0 :(得分:1)
我遇到了这个问题,它似乎与Azure function SDK中的某种错误有关。解决方法是添加:
<_FunctionsSkipCleanOutput>true</_FunctionsSkipCleanOutput>
到您的csproj文件。为documented here
答案 1 :(得分:0)
我能够通过使用较旧版本的nuget包来解决这个问题。我的出发点是我将一个类文件从一个旧项目复制到一个新项目。类文件引用了JwtSecurityToken。这不会在新项目中编译,所以我从nuget包管理器添加了Security.IdentityModel.Tokens.Jwt。我刚刚添加了最新版本。这在当地很好用,但就像你一样,它在发布到azure时失败了。然后我查看了旧项目并注意到它使用的是Security.IdentityModel.Tokens.Jwt的5.1.4。所以,我降级到那个版本,它现在可以在发布时使用。
fwiw:这是我执行此操作时的v2预览运行时版本。
https://<mysite>.azurewebsites.net/admin/host/status?code=<myadminkey>
{
"id": "<mysite>",
"state": "Running",
"version": "2.0.11587.0",
"versionDetails": "2.0.11587.0-beta1 Commit hash: 1e9e7a8dc8a68a3eff63ee8604926a8d3d1902d6"
}