【问题标题】: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 将构建一次,因此将为其中一个项目“错误地”构建。

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

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

    例如:

    1. 在默认的“发布”和“调试”配置中,禁用 ProjectC。
    2. 创建新的“ProjectC-Release”和“ProjectC-Debug”配置。
    3. 在“项目发布|调试”配置中,禁用项目。
    4. 在 ProjectA(ProjectC 和 ProjectB 引用的项目)中,根据 Configuration 属性的值对 Import 进行条件化。

      (但是,我怀疑您提出的问题并不是您真正要解决的问题。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      • 2021-11-16
      相关资源
      最近更新 更多