我正在开发一个库(nupkg
)在.net core针对net45
和netstandard1.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" }
}