【问题标题】:MSBuild: How to conditionally import another project in a .csproj file based on the name of build-originated project?MSBuild:如何根据生成项目的名称有条件地在 .csproj 文件中导入另一个项目?
【发布时间】:2022-08-15 08:49:21
【问题描述】:
上下文:我有一个 .Net 标准 2.0 项目,比如 ProjectA,我在其中使用 <Import Project=\"xxxx.targets\" /> 语句从目标文件导入项目。此解决方案有许多项目(ProjectA、ProjectB、ProjectC 和 ProjectD)。项目 A 在项目 B 和项目 C 中使用项目引用进行引用。
问题是:如果构建/重建请求来自特定项目,比如 ProjectC,我想忽略这个导入语句并正常构建 ProjectA。如果构建请求来自项目 B 或项目 A,我想包含此导入。我了解 <Import Project=\"xxxx.targets\" /> 可以具有 \"Condition\" 属性。但是我该如何实现这个想法呢?有什么建议吗?
标签:
c#
.net
msbuild
csproj
visual-studio-2022
【解决方案1】:
如果引用的项目尚未构建,ProjectReference 将导致构建它。不支持根据需要项目的项目更改引用项目的构建。如果可以的话,那会产生各种各样的问题。从解决方案构建时,ProjectB 或 ProjectC 都可能触发构建 ProjectA,并且由于 ProjectA 将构建一次,因此将为其中一个项目“错误地”构建。
对于给定的配置/平台,项目应该始终构建相同的。
但是您可以创建新的单独配置。
例如:
- 在默认的“发布”和“调试”配置中,禁用 ProjectC。
- 创建新的“ProjectC-Release”和“ProjectC-Debug”配置。
- 在“项目发布|调试”配置中,禁用项目。
- 在 ProjectA(ProjectC 和 ProjectB 引用的项目)中,根据
Configuration 属性的值对 Import 进行条件化。
(但是,我怀疑您提出的问题并不是您真正要解决的问题。)