Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#类型是在未引用的程序集中定义的_C#_Owin - Fatal编程技术网

c#类型是在未引用的程序集中定义的

c#类型是在未引用的程序集中定义的,c#,owin,C#,Owin,我正在使用Microsoft.Owin 4.1开发一个.net MVC5项目。Owin的工作方式不一样,所以我认为我可以通过调试进入Owin源代码来解决这个问题 这些步骤是: 克隆回购协议 将我的项目引用的3个包添加到我的解决方案中(右键单击解决方案>添加>现有项目) Microsoft.Owin Microsoft.Owin.Security Microsoft.Owin.Security.Cookies 最后添加了对我的项目的引用(右键单击我的项目>添加>引用) 当我尝试构建解决方案时,

我正在使用Microsoft.Owin 4.1开发一个.net MVC5项目。Owin的工作方式不一样,所以我认为我可以通过调试进入Owin源代码来解决这个问题

这些步骤是:

克隆回购协议
将我的项目引用的3个包添加到我的解决方案中(右键单击解决方案>添加>现有项目)

  • Microsoft.Owin
  • Microsoft.Owin.Security
  • Microsoft.Owin.Security.Cookies
最后添加了对我的项目的引用(右键单击我的项目>添加>引用)

当我尝试构建解决方案时,它会抛出如下错误:

类型“IOwinContext”在未引用的程序集中定义。必须添加对程序集“Microsoft.Owin,版本=3.0.1.0,区域性=中性,PublicKeyToken=31bf3856ad364e35”的引用

VS将行
app.CreatePerOwinContext
标记为错误源

公共部分类启动{
public void ConfigureAuth(IAppBuilder应用程序){
app.CreatePerOwinContext(AppUserContext.Create);
...
另一个错误是关于同一依赖项的版本4.1.0.0(实际上是我的版本,所以这个版本很混乱)

我的问题是为什么owin源代码没有被构建者视为v4.1.0.0程序集,以及在这种情况下如何克服不同的版本需求。我的意思是,我知道如果NuGet引用出现这种情况,我可以使用
bindingredirect
,但不知道如何处理包含源代码的情况在NuGet包含依赖项时,消除了一些混淆,即不需要引入
bindingredirect
。(见下文)

旁注:在我开始尝试将这些项目作为源代码之前,它们被添加为NuGet包。没有引入
bindingredirect
,并且在没有任何错误或警告的情况下执行了构建。(在引入owin项目之前,此部分显然已从csproj文件中删除)

csproj中的相关部分


..\packages\Microsoft.Owin.4.1.0\lib\net45\Microsoft.Owin.dll
..\packages\Microsoft.Owin.Security.4.1.0\lib\net45\Microsoft.Owin.Security.dll
..\packages\Microsoft.Owin.Security.Cookies.4.1.0\lib\net45\Microsoft.Owin.Security.Cookies.dll
编辑:
此外,我正在寻找的答案是如何辨别(如果可能的话)在当前解决方案中查找暂时依赖项的生成器。说明:在我的解决方案中,通过NuGet引入了两个
Microsoft.AspNet.Identity
。这些包依赖于
Microsoft.Owin
和子包。在编译完这些包之后,我是否可以告诉生成器rosoft.AspNet.Identity可以使用它们吗?

要调试依赖项,您不需要将项目链接为引用。您可以在单独的解决方案中打开项目并生成调试程序集(DLL和PDB)然后,如果构建项目,可以将调试二进制文件和源映射复制到构建输出文件夹中,然后对其进行调试,同时也可以单步执行项目引用

例如,假设我想调试AutoMapper:

我的项目引用Automapper nuget包:

我构建我的项目:

nuget生成(版本)将复制到输出:

然后将项目引用的发布版本替换为调试版本:


现在,使用调试器启动项目,您也应该能够调试引用。(VS将覆盖每个生成上的nuget程序集,因此您每次都必须复制它们).

要调试依赖项,您不需要将项目链接为引用。您可以在单独的解决方案中打开项目并生成调试程序集(DLL和PDB)然后,如果构建项目,可以将调试二进制文件和源映射复制到构建输出文件夹中,然后对其进行调试,同时也可以单步执行项目引用

例如,假设我想调试AutoMapper:

我的项目引用Automapper nuget包:

我构建我的项目:

nuget生成(版本)将复制到输出:

然后将项目引用的发布版本替换为调试版本:


现在,使用调试器启动项目,您也应该能够调试引用。(VS将覆盖每个生成上的nuget程序集,因此您每次都必须复制它们).

我经常在针对不同版本的.NET Framework时看到这个错误。您引用的是Owin的net45版本。您的项目是否针对更高版本,如4.6?@RyanThomas是的,您让我正确地认识到了这一点。在将所有项目设置为.NET Framework 4.5后,以及在大量更新软件包之后…-重新安装我f最终编译!请创建一个答案,我会将其标记为已接受的答案!谢谢!@RyanThomas Ehh抱歉,这是一个误报。生成成功,因为更新包安装了暂时依赖项,因此它重新引入了Microsoft.Owin包。所有项目都设置为.net framework 4.5,但我仍然有相同的错误消息。如果您进入web.config,它是否显示正确的版本?如果不显示,请删除配置中的引用并重新生成。另一种可能解决此问题的方法是转到您的库并从中删除引用。我建议您从中阅读。我经常看到针对不同版本的.NET Framework的错误。您正在引用net45版本的Owin。您的项目是否针对更高的目标,如4.6?@RyanThomas是的,您让我找到了正确的方向。在将所有项目设置为.net framework 4.5之后