C# 获取无法加载文件或程序集';System.Core,版本=4.0.0.0..';在asp.net内核中使用moq进行单元测试时

C# 获取无法加载文件或程序集';System.Core,版本=4.0.0.0..';在asp.net内核中使用moq进行单元测试时,c#,asp.net,unit-testing,asp.net-core,project.json,C#,Asp.net,Unit Testing,Asp.net Core,Project.json,我正在进行一个非常简单的单元测试。当我运行测试时,出现异常无法加载文件或程序集“无法加载文件或程序集”System.Core,Version=4.0.0.0..”此错误是在我在Project.json文件中添加了“Microsoft.NETCore.Portable.Compatibility”:“1.0.1”后开始出现的。但它是必需的,否则我不能在单元测试中使用lambda表达式 在我的单元测试中没有编译时错误。我确信我的测试没有任何错误,因为project.json文件缺少一些东西。下面是我

我正在进行一个非常简单的单元测试。当我运行测试时,出现异常无法加载文件或程序集“无法加载文件或程序集”System.Core,Version=4.0.0.0..”此错误是在我在Project.json文件中添加了“Microsoft.NETCore.Portable.Compatibility”:“1.0.1”后开始出现的。但它是必需的,否则我不能在单元测试中使用lambda表达式

在我的单元测试中没有编译时错误。我确信我的测试没有任何错误,因为project.json文件缺少一些东西。下面是我的测试

Mock<RegistrationManager> manager = new Mock<RegistrationManager>();
            Mock<RegistrationModel> model = new Mock<RegistrationModel>();
            var value = manager.Setup(a => a.GetDataFieldValuesForModel(model.Object, CommandType.next)).ReturnsAsync(new RegistrationModel { hasError = false, FormId="123",LeadId="345" });


{
  "version": "0.1.0-*",
  "dependencies": {
    "Moq": "4.5.22",
    "xunit": "2.2.0-beta2-build3300",
    "dotnet-test-xunit": "2.2.0-preview2-build1029",
    "IntegraPay.Domain": {
      "version": "1.0.0-*",
      "target": "project"
    },
    "Integrapay.RegistrationApplication": {
      "version": "",
      "target": "project"
    },
    "Microsoft.NETCore.Portable.Compatibility": "1.0.1"
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "net451"
      ],
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0"
        }
      }
    }
  },
  "testRunner": "xunit"
}
Mock manager=new Mock();
模拟模型=新模拟();
var value=manager.Setup(a=>a.GetDataFieldValuesForModel(model.Object,CommandType.next)).ReturnsAsync(新注册模型{hasError=false,FormId=“123”,LeadId=“345”});
{
“版本”:“0.1.0-*”,
“依赖项”:{
“最低起订量”:“4.5.22”,
“xunit”:“2.2.0-beta2-build3300”,
“dotnet测试xunit”:“2.2.0-preview2-build1029”,
“IntegraPay.Domain”:{
“版本”:“1.0.0-*”,
“目标”:“项目”
},
“Integrapay.RegistrationApplication”:{
“版本”:“,
“目标”:“项目”
},
Microsoft.NETCore.Portable.Compatibility:“1.0.1”
},
“框架”:{
“netcoreapp1.0”:{
“进口”:[
“net451”
],
“依赖项”:{
“Microsoft.NETCore.App”:{
“类型”:“平台”,
“版本”:“1.0.0”
}
}
}
},
“testRunner”:“xunit”
}
也有同样的问题

通过几处改动解决了这个问题:

  • 将依赖项从Moq更改为Moq.netcore(您还需要添加自定义nuget提要“”,在中找到)
  • 删除了导入的dnx451(在您的案例中为net451),此答案对我帮助很大:
  • 删除了兼容性项目的链接(moq.netcore不需要它)
  • 添加对System.Diagnostics.TraceSource的引用(因为它未被引用,但出于某些原因需要)
  • 我的最终project.json如下所示:

    {
      "version": "1.0.0-*",
    
      "dependencies": {
        "NUnit": "3.5.0",
        "dotnet-test-nunit": "3.4.0-beta-2",
        "MyTestingProject": "1.0.0-*",
        "Moq.netcore": "4.4.0-beta8",
        "System.Diagnostics.TraceSource": "4.0.0" 
      },
      "testRunner": "nunit",
    
      "frameworks": {
        "netcoreapp1.0": {
          "imports": [
            "netcoreapp1.0",
            "dnxcore50"
          ],
          "dependencies": {
            "Microsoft.NETCore.App": {
              "version": "1.0.1",
              "type": "platform"
            }
          }
        }
      }
    }
    
    有同样的问题

    通过几处改动解决了这个问题:

  • 将依赖项从Moq更改为Moq.netcore(您还需要添加自定义nuget提要“”,在中找到)
  • 删除了导入的dnx451(在您的案例中为net451),此答案对我帮助很大:
  • 删除了兼容性项目的链接(moq.netcore不需要它)
  • 添加对System.Diagnostics.TraceSource的引用(因为它未被引用,但出于某些原因需要)
  • 我的最终project.json如下所示:

    {
      "version": "1.0.0-*",
    
      "dependencies": {
        "NUnit": "3.5.0",
        "dotnet-test-nunit": "3.4.0-beta-2",
        "MyTestingProject": "1.0.0-*",
        "Moq.netcore": "4.4.0-beta8",
        "System.Diagnostics.TraceSource": "4.0.0" 
      },
      "testRunner": "nunit",
    
      "frameworks": {
        "netcoreapp1.0": {
          "imports": [
            "netcoreapp1.0",
            "dnxcore50"
          ],
          "dependencies": {
            "Microsoft.NETCore.App": {
              "version": "1.0.1",
              "type": "platform"
            }
          }
        }
      }
    }
    

    我记得当我过去常常遇到这个错误时,我唯一能修复它的方法就是以管理员权限启动VS(我的IDE);这是一个相当普遍的错误,有大量不同的变量影响问题。。。您是否可以尝试将一小部分代码移动到一个全新的项目中,该项目包含您需要的所有依赖项,然后重试?您是否可以发布测试项目和测试项目的project.json文件?@maxspan Ah ok。我使用的是VS2017,尽管我没有使用Moq,但仍然会遇到这个缺少的引用的问题。我记得当我以前遇到这个错误时,唯一可以修复它的方法是使用管理员权限启动VS(我的IDE)。它仍然失败。不幸;这是一个相当普遍的错误,有大量不同的变量影响问题。。。您是否可以尝试将一小部分代码移动到一个全新的项目中,该项目包含您需要的所有依赖项,然后重试?您是否可以发布测试项目和测试项目的project.json文件?@maxspan Ah ok。我正在使用VS2017,尽管我没有使用Moq,但仍然会遇到缺少参考的问题。