.NET System.Drawing.Common 4.5.1 的 NuGet 包包含错误版本的程序集
Posted
技术标签:
【中文标题】.NET System.Drawing.Common 4.5.1 的 NuGet 包包含错误版本的程序集【英文标题】:NuGet package for .NET System.Drawing.Common 4.5.1 contains incorrect version of assemblies 【发布时间】:2020-06-07 00:50:39 【问题描述】:我正在尝试在项目中使用 System.Drawing.Common
,具体取决于(旧版).NET Standard 2.0。如果我尝试以 Standard 2.1 为目标,我会遇到与我的依赖项之一 pythonnet 的兼容性问题,因此我需要坚持使用 2.0,直到 pythonnet 正式支持 .NET Standard。目前,如果 pythonnet 以 .NET Standard 2.0 为目标,pythonnet 可以导入我的程序集,但不能用于 .NET Standard 2.1。
为了与 .NET Standard 2.0 兼容,最新可用的包是 System.Drawing.Common 4.5.1。安装后,我的解决方案构建,但在运行时我收到错误
System.PlatformNotSupportedException: 'System.Drawing is not supported on this platform.'
根据this page,这个版本的System.Drawing.Common
包应该能够以.NET Standard 2.0 为目标。我发现NuGet包中包含几个System.Drawing.Common.dll
不同平台的文件,但是文件版本是4.6.2。
是我遗漏了什么还是 NuGet 包中的错误?好像是这样的。
【问题讨论】:
您的项目的目标是什么运行时? @yaakov(更正).NET Core 2.1 我将目标框架更改为 .NET Framework 4.8 作为临时解决方法,现在它按预期工作(这不是真正的解决方案,但“至少它可以工作在我的机器上”#WOMM) 【参考方案1】:版本号不是问题。没有要求或保证任何程序集版本、文件版本或包版本都匹配。
PlatformNotSupportedException 将来自其他问题,尽管查看包我不太确定是什么。很大程度上取决于您的项目的实际构建和运行方式。
【讨论】:
【参考方案2】:我的问题是我有 2 个 .NET Core 应用项目,其中一个依赖于另一个 (这样我就可以从另一个执行应用应用程序)。 .NET Core 应用程序的问题是它们需要额外的文件才能工作(比如
<assembly name>.deps.json
(这是罪魁祸首) 和 <assembly name>.runtimeconfig.json
) 并且出于某种原因它们不会在构建时被复制。
我所做的粗略解决方案是将复制命令添加到依赖项目的构建事件中
COPY "$(SolutionDir)<dependency project>\$(OutDir)<assembly name>.runtimeconfig.json" "$(SolutionDir)$(ProjectName)\$(OutDir)" /Y
COPY "$(SolutionDir)<dependency project>\$(OutDir)<assembly name>.deps.json" "$(SolutionDir)$(ProjectName)\$(OutDir)" /Y
但是手动复制它们也应该可以解决问题。
【讨论】:
以上是关于.NET System.Drawing.Common 4.5.1 的 NuGet 包包含错误版本的程序集的主要内容,如果未能解决你的问题,请参考以下文章
.NET平台系列26:在 Windows 上安装 .NET Core/.NET5/.NET6