【问题标题】:How to build dependent projects without referencing them?如何在不引用它们的情况下构建依赖项目?
【发布时间】:2017-07-28 00:38:22
【问题描述】:

在我的解决方案中,这些项目已包含在我的解决方案中,而不是为某些库引用 DLL:

与其将项目部分包含在解决方案中,是否可以将它们作为build definition 的一部分,或者作为预构建事件命令行的一部分:

如何包含需要为我的解决方案构建的项目,而无需实际将它们加载到解决方案中?

【问题讨论】:

  • 你能解释一下为什么你不想使用引用吗?无论如何,是的,您可以使用发布多个 msbuild 语句的 prebuild 事件来构建每个 projetc。
  • @stijn 原因是这些项目正在从其他解决方案不断开发中
  • @stijn 这在使用插件架构或类似 MEF 的东西时很常见
  • @MeggieLuski 您是否尝试过查看配置管理器?看看项目是否设置在那里构建。
  • 是的,他们已经准备好建造了,但是这有什么关系呢?

标签: c# .net visual-studio visual-studio-2013


【解决方案1】:

您可以通过两种方式工作。您在项目中引用其他项目或 dll。你可以将两者结合起来。如果您不希望在解决方案中构建的某些项目不属于解决方案的一部分,则必须预先构建它们并将引用指向编译过程的输出。如果您希望它们成为解决方案的一部分但不编译,请使用构建配置管理器。您可以使用它来标记哪些项目是在该配置下构建的,哪些项目没有构建。

如果您有一个大型解决方案,最好将输出设置到任意 binlib 文件夹并从那里引用。在这种情况下,请务必设置项目构建顺序。

对于小型解决方案,项目参考可以正常工作。在这种情况下,构建顺序将自行建立。

不同之处在于性能 - 如果 #1 - dll 引用允许您构建单个项目。在案例 #2 中,构建单个项目将触发项目编译链。在这种情况下,您只需等待更长的时间。在大型解决方案中,这对开发人员不利。

最后一件事,如果你有一些 DLL 没有被引用但在你的应用程序中被使用,比如说通过反射加载,你可以使用 pre buildpost build 事件将这些复制到$(TargetDir)

【讨论】:

  • "你必须预先构建它们并指向编译过程的输出。"----我该怎么做?
  • 这个问题让我“碰壁”——例如,您将它们构建为另一个解决方案的一部分。然后,您应该有一个 bin 文件夹,您可以在其中永久存储它们。然后你去project-add reference-browse。选择您的 dll 并添加参考
  • 我完全与“靠墙”有关 - 现实并不像简单地订阅 nuget 提要那么简单,如果您建议将它们构建为另一个解决方案的一部分,请记住这些引用项目正在不断开发中,那么在构建当前解决方案之前,我如何强制构建另一个解决方案(如您所建议的那样)?
  • 你能控制那个“其他”解决方案吗?
  • 您建议使用所需项目创建另一个解决方案,对吗?
【解决方案2】:

我在同一个解决方案中的所有项目都没有被引用,我通过将以下命令放入启动项目的预构建事件中来构建它们

"$(DevEnvDir)devenv" "$(SolutionDir)SolutionName.sln" /重建 $(ConfigurationName) /project "$(SolutionDir)ProjectFolder\ProjectFile.csproj"

已更正!

"$(DevEnvDir)devenv" "$(SolutionPath)" /Rebuild $(ConfigurationName) /project "$(SolutionDir)YOUR_PROJECT_FOLDER\PROJECT_FILE.csproj"

【讨论】:

  • 这是正确的答案,但需要稍作修改: "$(DevEnvDir)devenv" "$(SolutionPath)" /Rebuild $(ConfigurationName) /project "$(SolutionDir)YOUR_PROJECT_FOLDER\PROJECT_FILE. csproj"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-07
  • 1970-01-01
  • 2020-01-05
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多