dnxcore50可以引用针对.net4.5编译的nuget包吗

Posted

技术标签:

【中文标题】dnxcore50可以引用针对.net4.5编译的nuget包吗【英文标题】:can nuget packages compiled against .net4.5 be referenced by dnxcore50 【发布时间】:2015-10-12 13:32:25 【问题描述】:

我正在编译一个仅针对 dnxcore50 的应用程序。

我正在尝试引用一个我知道在针对 dnx451 运行时可以正常工作的 nuget 包。当我做dnx . run 时,我得到:

System.InvalidOperationException:无法解析目标框架“DNXCore,Version=v5.0”的以下依赖项:

它还建议dnu restore,但包在那里

它显然不适用于这个包,所以在什么情况下它会(如果有的话)? 为了让它工作,包管理器必须构建一个针对 dnxcore50 编译的版本吗?

更新

这张图表让事情变得更清楚了(复制自here)

【问题讨论】:

"dnxcore50是否可以引用针对.net4.5编译的nuget包" 没有。 @vcsjones 有没有办法查明是否有问题的包是针对 dnxcore50 编译的,或者是否有已编译的包列表(因此可以引用)?这里的问题是您可以在 project.json 中添加 ref 并且错误消息并不是那么清楚:即使它确实列出了有问题的 dll,也没有提及下游导致问题的原因。在某些情况下,您可能会冒险猜测,但“框架不匹配”错误可能会比“没有真正缺少程序集”错误更有帮助 dnxcore50 正在进行中,需要一段时间才能支持 Linux/OSX 目标上的所有框架程序集。 dnx451 存在的基本原因,它依赖于您机器上安装的 .NET Framework。 【参考方案1】:

没有。 dnxcore50 表示您在 .NET Core 之上的 DNX 上运行。您可以在 .NET Core 中加载的唯一程序集是那些以兼容配置文件为目标的程序集,在这种情况下,例如dnxcore50dotnet 或兼容的便携式配置文件之一。

如果您有一个针对完整 .NET Framework 编译的程序集(通过 net45net451 等),则它在 .NET Core 上将无法运行,因为相同的 API 不可用。

【讨论】:

一目了然(即无需下载)是否可以知道一个nuget包是否支持dnxcore50? (或框架 x)例如 nuget.org/packages/log4net 没有。必须下载软件包才能看到该信息。您可以使用 NuGet 包资源管理器直接从提要中快速打开包,以使其更轻松。

以上是关于dnxcore50可以引用针对.net4.5编译的nuget包吗的主要内容,如果未能解决你的问题,请参考以下文章

为啥默认的 mvc6 模板针对多个 DNX 版本?

asp.net dnxcore50 按文件路径加载程序集

DNX451 与 DNXCORE50 获取当前应用程序目录

“找到的程序集的清单定义与程序集引用不匹配”

.net4.5的项目引用了一个.net2.0的dll,接口callback里面引用context.session为空

安装了 .NET 4.5 的构建服务器能否成功地将针对 4.0 的项目部署到仅安装了 .NET 4.0 的服务器?