在针对多个框架的.net core包中使用反射



我正在开发一个库(nupkg)在.net core针对net45netstandard1.3,在某些时候我需要使用反射,所以我的project.json看起来像这样:

{
  "version": "1.1.3",
  "dependencies": {
       common-dependencies
    }
  },
  "frameworks": {
    "net45": {
      "frameworkAssemblies": {
        "System.Reflection": "4.0.0.0"
      },
      "dependencies": {
        "NLog": "4.3.5",
        "Newtonsoft.Json": "6.0.4"
      }
    },
    "netstandard1.3": {
      "imports": "dnxcore50",
      "dependencies": {
        "NETStandard.Library": "1.6.0",
        "System.Reflection.TypeExtensions": "4.1.0",
        "Newtonsoft.Json": "8.0.2",
        "NLog": "4.4.0-*"
      }
    }
  }
}

大多数时候,在install-package my-package之后,一切都像一个魅力,但是几次我在安装时得到这个错误:

install-package: Failed to add reference。包"my-Package"试图添加一个框架引用到"System"。在GAC中没有找到的反射。这可能是包中。请联系包主寻求帮助。

我已经找到了一个解决方案,这是uninstall-package项目上的每一个其他包,我想安装我的包。我认为这是非常奇怪和不受欢迎的行为。

我确实注意到,在一些项目中,不同的项目安装了不同版本的Newtonsoft.Json。这是我在安装失败时也会得到的警告:

安装失败。回滚…
Package 'my-package: Newtonsoft。Json [6.0.4,), NLog[4.3.5,] '在项目'Target '中不存在。项目"

我不知道这里发生了什么,事实是它是随机发生的,解决它的方法也没有多大帮助。

有什么想法吗?

System.Reflection是一个引用程序集,但不是运行时程序集。因此,您需要在构建代码时使用它,而不是从构建的程序集中引用它。

指定"type": "build",例如:

"frameworkAssemblies": {
  "System.Reflection": { "type": "build" }
}

相关内容

  • 没有找到相关文章

最新更新