【发布时间】: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