【发布时间】:2020-02-20 08:44:00
【问题描述】:
我正在使用 Microsoft.Owin 4.1 开发一个 .net MVC5 项目。 Owin 不能像 I think it supposed to 那样工作,所以我想我可以通过调试到 owin 源代码来解决这个问题。
步骤是:
克隆了aspnetkatana repo
将我的项目引用的3个包添加到我的解决方案中(右键单击解决方案>添加>现有项目)
- Microsoft.Owin
- Microsoft.Owin.Security
- Microsoft.Owin.Security.Cookies
终于添加了对我项目的引用(右击我的项目>添加>引用)
当我尝试构建解决方案时,它会抛出如下错误:
类型“IOwinContext”在未引用的程序集中定义。您必须添加对程序集 'Microsoft.Owin, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 的引用。
VS 将app.CreatePerOwinContext 行标记为错误源。
public partial class Startup {
public void ConfigureAuth(IAppBuilder app) {
app.CreatePerOwinContext(AppUserContext.Create);
...
另一个错误抱怨相同依赖项的版本 4.1.0.0(实际上是我拥有的版本,所以这个版本很混乱)
我的问题是为什么构建器不将 owin 源视为 v4.1.0.0 程序集,以及在这种情况下如何克服不同版本的需求。我的意思是我知道如果 NuGet 引用会发生这种情况,我可以使用bindingredirect,但不知道如何处理包含源的情况。当 NuGet 包含依赖项时,也没有必要引入 bindingredirect,这也会引起一些混乱。 (见下文)
旁注:在我开始尝试将这些项目作为源代码添加之前,它们被添加为 NuGet 包。没有引入bindingredirect,构建执行时没有任何错误或警告。 (这部分显然是在引入owin项目之前从csproj文件中删除的)
.csproj中的相关部分
<Reference Include="Microsoft.Owin, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.4.1.0\lib\net45\Microsoft.Owin.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Owin.Security, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.Security.4.1.0\lib\net45\Microsoft.Owin.Security.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Owin.Security.Cookies, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.Security.Cookies.4.1.0\lib\net45\Microsoft.Owin.Security.Cookies.dll</HintPath>
</Reference>
编辑:
另外,我正在寻找的答案是如何告诉(如果可能的话)在当前解决方案中寻找临时依赖关系的构建器。澄清:在我的解决方案中,Microsoft.AspNet.Identity 已通过 NuGet 引入。这些包依赖于Microsoft.Owin 和子包。我可以告诉 builder 在这些包编译后Microsoft.AspNet.Identity 可以使用它们吗?
【问题讨论】:
-
我经常在针对不同版本的 .NET Framework 时看到此错误。您正在引用 Owin 的 net45 版本。您的项目是否针对更高版本(例如 4.6)?
-
@RyanThomas 是的,你让我走上了正轨。在将所有项目设置为 .net framework 4.5 并经过大量 Update-Packate ... -如果最终编译后重新安装!请创建一个答案,我会将其标记为已接受的答案!谢谢!
-
@RyanThomas 呃抱歉,这是误报。构建成功,因为 update-package 安装了临时依赖项,因此它重新引入了 Microsoft.Owin 包。所有项目都设置为 .net framework 4.5,但我仍然收到相同的错误消息。
-
如果您进入您的 web.config,它会显示正确的版本吗?如果没有,请删除配置中的引用并重建。另一种可能解决此问题的方法是转到您的库并从那里删除引用。
-
我可以推荐从Nick Craver阅读Binding Redirects