【问题标题】:Seamless NuGet version integration between .NET 4 and 45 projects.NET 4 和 45 项目之间的无缝 NuGet 版本集成
【发布时间】:2017-06-13 10:23:20
【问题描述】:

我有一个面向 4.5 的类库(称为 ProjectA)。它不一定使用 4.5 的特定功能。我需要它来构建 4.0 和 4.5 程序集。我需要它来生成具有两个程序集版本(4.0 + 4.5)的单个 NuGet 包。它将被另一个同样以 4.5 为目标的类库 (ProjectB) 使用。

我还需要 ProjectB 来做同样的事情(为 4.0 和 4.5 构建输出程序集)并创建一个支持两者的单个 NuGet 包。

我已经为 ProjectA 和 ProjectB 项目添加了 4.0 的额外构建配置:

在 ProjectB 中,我还在 .nuspec 文件中添加了额外的依赖项和文件,用于定义 ProjectA 对 NuGet 的依赖关系:

ProjectA 构建得很好,并生成了一个 NuGet .nupkg,它包含两个二进制文件(一个用于 4.0,一个用于 4.5)。当 ProjectB 使用 ProjectA 时,它会从 ProjectA 中引入 4.5 程序集。当 ProjectB 编译它自己的程序集的 4.5 版本时,一切都很好。

这就是事情变得棘手的地方。当我切换 ProjectB 以使用它的 4.0 构建配置时,Visual Studio 会告诉我我对 ProjectA 的引用是 4.5,并且不能使用 ProjectB 的 4.0 构建配置来构建。

当 ProjectB 中的构建配置更改为 4.0 时,我希望 Visual Studio 自动使用 ProjectA 中的 4.0 程序集。

我无法将 4.5 降级到 4.0 以使一切更加无缝。最终,ProjectC 将使用这两个库 4.0 程序集。因为 ProjectC 面向 4.0,无法更改。

如何让 ProjectB 使用 ProjectA,以便 ProjectB 使用来自 ProjectA 的正确程序集 (4.0/4.5),具体取决于 ProjectB 使用的构建配置。

【问题讨论】:

  • 您可以尝试创建两种不同的配置,一种用于 .net 4.0,一种用于 .net 4.5,然后在 csproj 中使用条件引用。示例:stackoverflow.com/questions/6523008/…
  • @Zbigniew 谢谢。你的评论帮了大忙。我还必须想办法创建两个不同的 REFERENCES,这似乎成功了。我赞成你的评论。如果您将此作为包含更多详细信息的答案提交(随意窃取我的),我很乐意标记您的答案。
  • 没问题,我会将您的答案标记为答案,因为它包含所有详细信息。

标签: c# .net visual-studio nuget


【解决方案1】:

经过几个小时的研究,并拜访了我的同事(以及来自@zbigiew 的评论),我被引导确定我需要更新 ProjectB 的项目文件。实际上,我必须让项目知道根据项目文件中的 CONDITIONAL 语句使用哪个参考,两个不同/单独的参考到 ProjectA 的二进制文件 (4.0/4.5)。

该部分有助于定义与项目关联的引用。根据各种条件,其本身可以是可选的。就我而言,我必须设置条件说,如果构建配置是“Release40”,则使用 .另一个参考说,如果构建配置是“发布”,则使用来自不同的 4.5 程序集。

【讨论】:

  • 很高兴知道您已经解决了这个问题,感谢您的分享。您可以将其标记为答案:)
猜你喜欢
  • 1970-01-01
  • 2019-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
相关资源
最近更新 更多