【问题标题】:How to determine with which dotnet sdk an assembly is built如何确定使用哪个 dotnet sdk 构建程序集
【发布时间】:2020-08-19 18:35:43
【问题描述】:

有没有一种方法可以确定使用哪个 dotnet SDK 构建程序集(针对 dotnet 核心)?

到目前为止,我们还没有使用 global.json 来指定使用哪个 dotnet SDK 来构建我们的程序集,这意味着使用的是最新的 SDK。 我们最近为新项目切换到 dotnet 3.1.x,但仍有很多项目针对 dotnet 2.1.x

我不确定在使用 dotnet 3.1.x SDK 构建针对 dotnet 2.1.x 的项目时会引入什么样的细微变化(甚至是错误?)

为了确保我们将使用global.json(以便在构建时定义使用哪个 .NET Core SDK 版本)。并且,如果可能的话,将检查已经交付了多少使用更高 dotnet 核心 SDK 构建的程序集。有没有可能?

【问题讨论】:

  • 可以使用ildasm工具查看DLL的目标框架。如果您使用该工具查看元信息,您会将其视为程序集属性。我没有时间制定出确切的命令行解决方案来自动执行此操作。
  • 感谢@virusstorm,但我不是在寻找程序集的目标 dotnet 核心版本,而是用于构建程序集的 dotnet SDK

标签: .net build dotnet-sdk


【解决方案1】:

注意:可能有更简单的方法可以做到这一点,但我目前不知道。我不知道有任何方法可以从 现有的 程序集中确定它。

使用 .NET Core SDK 构建时,会设置 NETCoreSdkVersion MSBuild 属性。

您可以使用BeforeTargets="CoreCompile" 创建一个目标,该目标生成包含该构建属性的源代码,以添加程序集级属性(您必须自己定义)。这类似于 AssemblyInfo.g.cs 的生成方式。

恐怕我现在没有足够的时间来整理它的完整示例 - 但您可以查看自动代码生成示例here。这是 NuGet 包中 targets 目录的一部分,因此依赖于该包的代码会自动生成代码;你可以这样做,或者如果一切都在同一个解决方案中,你可以使用Directory.Build.targets 或类似的。

【讨论】:

  • 完美!谢谢。我们已经向 AssemblyConfiguration 属性添加了许多附加信息。这个 NETCoreSdkVersion 是一个完美的补充。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多