我正在尝试启动一个website模块进入我的果园CMS网站。为了安全起见,web必须使用JWT。
我制作了这样一个模块。当在我的开发环境中脱机构建和编译时,一切都是成功的。我能够查询API并获得一些结果。这里证明了API在我的开发环境邮递员反应截图中返回一个JWT。
这很好,而且很好。但是,当我试图将模块上传到我现有的网站(建立在Orchard CMS上)时,我会得到一个错误:
<directory>/JwtManager.cs(4): error CS0234: The type or namespace name 'Jwt' does not exist in the namespace 'System.IdentityModel.Tokens' (are you missing an assembly reference?)
引用程序集肯定包含在我正在创建的nuget包中(在bin
目录中可见)。我在StackOverflow上看到了与JWT的5.0.0.0+组装版本有关的其他问题,比如这里 --然而,这些问题都没有出现相同的错误。此外,我已经确认我的代码正在使用正确的对象来构建例如。SigningCredentials和SymmetricSecurityKey,所以我不认为这些答案与我的特殊情况有关。
我不太熟悉使用引用程序集来处理这些问题,所以如果这是一个简单的修复,我很抱歉。以下是我尝试过的工作:
System.IdentityModel.Tokens.Jwt
“特定版本”属性设置为true
。同样的错误持续存在。System.IdentityModel.Tokens.Jwt
程序集上使用bindingRedirect
。同样的错误持续存在(此二进制文件的旧版本正在解决方案中的另一个项目中使用)。using System.IdentityModel.Tokens.Jwt;
语句,并使用语句强烈定义依赖于此语句的任何对象。有趣的是,在这样做的过程中,我并没有收到eg声明中的错误。System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler();
-不过,我在HttpActionResult实现中的行public string ReasonPhrase { get; }
上确实收到了一个错误must declare a body because it is not marked abstract or extern.
。上面第3点让我相信,ASP.Net版本可能存在一些问题,导致了所有这些奇怪之处(因为上面只是一个简单的属性.),但我真的不确定。我确保了目标框架在我的开发环境和在线环境中都是相同的(.NET框架4.5.2)。
对我来说,所有这些都没有意义,因为在我的开发环境中,一切都很好,开发环境是建立在与我的在线环境相同的OrchardCMS版本之上的。
我在项目中使用的引用程序集:
System.IdentityModel.Tokens.Jwt
- v5.1.5.0Microsoft.IdentityModel.Tokens
- v5.1.5.0在这件事上的任何帮助都是非常感谢的--这个小小的障碍在很大程度上阻碍了我的进步,而我似乎没有做任何事情来解决这个问题!
附加信息:I应该澄清,这个问题中提到的“生产”环境并不维护我们源代码的版本。但是,我已经创建了一个单独的测试环境,它反映了我们的生产环境,并在那里安装了源代码。
需要注意的是,通过Orchard管理仪表板安装NuGet包是加载代码的机制。本问题中以前所有对联机环境的引用都是指试图加载此代码的过程。
当我实际将包作为项目添加到我们的解决方案中时,问题就不会发生,而且我们的web实现可以在我们的测试环境中工作。
但是,这不是一个解决方案,因为我们没有也不会在我们的生产环境中维护解决方案源的版本。然而,它可以为一个更有知识的人提供一些线索,让他们知道正在发生什么?
发布于 2018-02-12 23:13:15
根据果园模块装载机文档 -动态编译仍然在我们的在线环境中启用。我们的参考库有一个问题,导致无法编译服务器端。我相信VS在某种程度上掩盖了这个问题,并且允许编译仍然脱机进行,因为我们的解决方案确实包含了正确的引用。
https://stackoverflow.com/questions/48738977
复制相似问题