MSBuild:如何根据生成源项目的名称在.csproj文件中有条件地导入另一个项目



上下文:我有一个.Net标准2.0项目,比如ProjectA,其中我使用<Import Project="xxxx.targets" />语句从目标文件导入项目。此解决方案有许多项目(ProjectA、ProjectB、ProjectC和ProjectD(。项目A在项目B和项目C中使用项目参考进行参考。

问题是:如果构建/重建请求源于特定的项目,比如ProjectC,我希望忽略此导入语句并正常构建ProjectA。如果构建请求源自项目B或项目A,我希望包含此导入。我知道<Import Project="xxxx.targets" />可以具有"Condition"属性。但是我该如何实现这个想法呢?有什么建议吗?

如果引用的项目尚未生成,ProjectReference将导致生成该项目。不支持基于需要引用项目的项目更改该项目的内部版本。如果可以的话,这会产生各种各样的问题。当从解决方案生成时,ProjectB或ProjectC可能会触发生成ProjectA,并且由于ProjectA将生成一次,因此其中一个项目的生成将"不正确"。

对于给定的配置/平台,一个项目应该始终构建相同的配置。

但是您可以创建新的单独配置。

例如:

  1. 在默认的"发布"one_answers"调试"配置中,禁用ProjectC
  2. 创建新的"ProjectC Release"one_answers"ProjectC Debug"配置
  3. 在"ProjectC Release | Debug"配置中,禁用ProjectB
  4. 在ProjectA(ProjectC和ProjectB都引用的项目(中,根据Configuration属性的值条件化Import

(然而,我怀疑你问的问题并不是你想要解决的问题。(

最新更新