C# 在Windows 10通用Windows库中引用BindingFlags类型时无法加载程序集

C# 在Windows 10通用Windows库中引用BindingFlags类型时无法加载程序集,c#,.net,portable-class-library,visual-studio-2015,C#,.net,Portable Class Library,Visual Studio 2015,在运行单元测试时,调用我的可移植运行库DLL中引用“System.Reflection.TypeExtensions”的任何方法都会生成FileNotFound异常,搜索“System.Reflection.TypeExtensions”。在Windows 10通用应用程序中执行相同代码时,不会发生此错误 该项目是一个C#可移植运行时库,配置为支持.net Framework 4.6和Windows Universal 10.0。测试项目配置为使用.net Framework 4.6 每当我尝试

在运行单元测试时,调用我的可移植运行库DLL中引用“System.Reflection.TypeExtensions”的任何方法都会生成FileNotFound异常,搜索“System.Reflection.TypeExtensions”。在Windows 10通用应用程序中执行相同代码时,不会发生此错误

该项目是一个C#可移植运行时库,配置为支持.net Framework 4.6和Windows Universal 10.0。测试项目配置为使用.net Framework 4.6

每当我尝试调用使用System.Reflection.BindingFlags类型的方法时,都会出现以下异常。调用开始时会发生异常(可能是在jit函数时)


添加对nuget软件包的引用:

System.Reflection
System.Reflection.Extensions
System.Reflection.Primitives

添加这些包是正确的做法。以下是您看到这种行为的原因:

  • BindingFlags
    当前[1]在
    System.Reflection.TypeExtensions
    中公开
  • 编译.NET核心类库时,编译器将类型引用记录为
    System.Reflection.TypeExtensions!System.Reflection.BindingFlags
  • 从.NET Framework应用程序使用类库时,需要添加对
    System.Reflection.TypeExtensions
    的引用,否则编译器无法解析该类型。单元测试项目也是如此,它必须部署所有代码才能运行
  • 在运行时,CLR将解析类型,找到指向
    mscorlib!的类型转发!System.Reflection.BindingFlags
    并愉快地运行代码
  • 作为一般经验法则:.NET Core旨在以应用程序本地方式部署框架,换句话说,当应用程序部署到文件夹时,也需要部署关闭所有依赖项。尽管单元测试项目在概念上是类库,但同样适用,因为它们的执行方式与应用程序类似

    当然,我们不希望人们手动调整引用和查找依赖项。您目前看到的是预发布部分,我们的工具经验中并非所有部分都做了正确的事情

    我这边有两个问题:

  • 您使用哪种单元测试框架?我假设它是MSTest(Microsoft.VisualStudio.TestTools.UnitTesting),而不是xUnit或NUnit

  • 你用的是哪种跑步者?我假设它是内置的VisualStudio测试资源管理器(与ReSharper或TestDriven.NET相反)



  • [1] 我之所以说现在,是因为根据客户反馈,我们希望将其移回
    System.Reflection
    ,以及采用
    绑定标志的API,我看到了,丑陋的bug。很难诊断,.NETCore的依赖关系不可能再解开。解决方法是将Nuget包添加到您的项目中。我也发现了这个问题(单元测试问题?我也在运行单元测试):这当然是完全相同的问题。我不清楚您为什么不想添加Nuget包。看来这件事是在1月15日被梅利诺的承诺所破坏的,因为梅利诺移动了旗帜。只要报告错误,点击新问题按钮,让他知道。请记住,像这样的错误是很正常的,CoreFx运行速度很快,几乎没有经过测试。你是一个背上插着箭的先锋。哈哈@背上插着箭的先锋。你能解释一下这里发生了什么事吗。我在安卓领域已经有一段时间了,平台的倍增对我来说是一块新的地盘。该软件包是由核心microsoft development构建和维护的吗?这只是一种新常态,还是跨平台的图书馆只是一个任何人都害怕涉足的地方?(nuget的工作当然很好。但是,至少可以说,必须运行到nuget才能获得核心运行库的概念令人不安)!必须登录才能写一个bug,这样一个有缺陷的概念。我会等到核心变得更稳定…是的,我正在用Visual Studio单元测试进行所有的单元测试,没有第三方参与。谢谢。我将确保这将适用于VS.My library targets.NET标准1.4的发布,并且调用方是一个完整的framework 4.6.1控制台应用程序。没有涉及“预发布位”,但我仍然遇到同样的问题。很高兴看到它得到了修复。添加这个,System.Reflection.TypeExtensions,然后它就可以工作了。
    
    System.Reflection
    System.Reflection.Extensions
    System.Reflection.Primitives