MSBuild&NuGet:将项目属性传播给间接依赖项

时间:2018-12-07 09:59:56

标签: properties scope msbuild dependencies nuget-package

简介

我有一个VS2017解决方案,包含多个项目,全部位于.NET中。有一个C#项目 A ,一个.NET应用程序,具有依赖项 B ,这是另一个Visual C ++项目,只是本机库的包装。它们存储在NuGet程序包中,该程序包 B 被引用为依赖项 C

说明性地: A B C

C 包含2个DLL(以及其他一些不相关的内容)。它们几乎是相同的,只有一种功能的实现方式不同(有理由将其分开)。在某些情况下,需要一个DLL,在某些情况下,则需要另一个。它们具有相同的名称(不可更改),因此不能将它们都复制到输出目录中。

要控制选择哪个DLL, C 的NuGet软件包在其.targets文件中包含一些逻辑。它基本上是基于属性(例如,具有有效值NativeDllTypeTypeOne的属性TypeTwo选择合适的DLL)。此属性必须在引用项目中定义,因此在.targets文件中可见。

问题

我发现只有 B (作为直接引用 C 的项目)可以将此属性设置为实际控制选择。如果我将该属性设置为 A ,那么它的范围似乎并没有达到 C ,它根本没有任何作用。 (我首先从 B 中删除了该属性,以防止覆盖)

问题

  • 有没有办法让它起作用?将属性传播到 C NuGet包以控制输入?
  • 还是将范围严格分开,以避免某些问题对财产产生其他影响?
  • 在第二种情况下,还有另一种方式来控制间接依赖项中的输入吗?

部分解决方案(绕过此问题)

B 不需要 C 即可构建,只需要运行时即可。由于 B 只是包装程序,因此该项目不可执行,因此始终会在其他要使用的地方引用它,例如 A (要运行的实际应用程序)。这意味着 C 可能不需要在 B 中引用,而是在 A 中引用,从而使其成为 A ”的直接依赖关系。然后, A 可以将项目属性设置为传播到 C ,这样就可以正常工作。但是,如果可能的话,我希望在包装器上引用这些库。

0 个答案:

没有答案