【问题标题】:Referencing assembly targeting 4.5.2 from .csproj targeting 4.5.1 gives error从 .csproj 目标 4.5.1 引用程序集目标 4.5.2 会出错
【发布时间】:2018-04-10 06:13:38
【问题描述】:

我有一个针对 4.5.2 的库。当我从.csproj4.5.1 引用这个库时,它会出错:

C:\程序文件 (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): 警告 MSB3274:主要参考“XXX,版本=1.0.0.0, 文化=中性,处理器架构=MSIL”无法解决 因为它是针对“.NETFramework,Version=v4.5.2”构建的 框架。这是比当前目标更高的版本 框架“.NETFramework,Version=v4.5.1”。

据我了解,4.5.14.5.2 已就地升级。通过就地升级,我知道如果我将我的.csproj 升级到4.5.2,并且当我的目标部署机器仍然有4.5.1 时,一切都应该正常工作,除非我升级的二进制文件使用4.5.2 的特定功能,这不是在4.5.1 中可用。到目前为止我是正确的吗?使用类似的逻辑,如果我从项目目标 4.5.1 引用库目标 4.5.2,它不应该工作吗?

【问题讨论】:

  • Microsoft 为确保新的框架版本向后兼容做了很多努力。但是,您要求的是前向兼容性,这种功能需要他们构建时间机器。它们只存在于书籍和电影中。更新用户的框架版本永远不会成为问题,必须支持拒绝启用 Windows 更新的用户是一个您无法在此处获得帮助的问题。这几乎总是一个虚构的问题。

标签: c# .net msbuild upgrade


【解决方案1】:

仅仅因为它是就地升级并不意味着您可以引用正向版本。最终,您要引用的包是 4.5.2,这意味着它可以利用 仅在 4.5.2 中存在的功能。因此,从 4.5.1 项目中将其作为目标是不安全,因为说“我的目标是 4.5.1”的全部意义在于,如果有人拥有 4.5.1,它应该运行。哪个:这不会。

所以:如果您想针对当前针对 4.5.2 的软件包,您有两种选择:

  • 将您的项目更改为目标 4.5.2
  • 查看您要引用的包是否可以调整为目标 4.5.1(代替 4.5.2 或作为 4.5.2 的补充)

【讨论】:

  • 谢谢马克!!我从安全的角度理解你的观点。但是是否可以在具有 4.5.1 的机器上运行针对 4.5.2 的应用程序? (提供的应用程序不使用 4.5.2 功能)
  • @RahulAgarwal 没有理由期望它会起作用,不;它可能工作,但那将是一种方便,而不是合理的期望。如果你想在 4.5.1 上工作:目标 4.5.1
  • 谢谢马克!!同意。我只是出于好奇问道。另外我相信您的回答它可能会起作用仅仅是因为 4.5.1 到 4.5.2 已就地升级,对吧?
  • @RahulAgarwal “就地升级”可能是一个红鲱鱼;老实说,我不会太在意这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 2019-04-04
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
  • 2015-03-11
相关资源
最近更新 更多