【发布时间】:2017-04-20 23:22:32
【问题描述】:
我有一个 Visual Studio 2012 C# 解决方案,其中包含大约 15 个.csproj 项目。
每个项目都使用在启动构建之前生成的通用 foo/bar.cs 文件。
我尝试了各种方法:
- 预构建事件
- 自定义 MSBuild 的
BeforeBuild目标
单独构建每个项目都可以正常工作。但是,一旦我使用“构建解决方案”,我就面临一个竞争条件:一个目标试图编译 foo/bar.cs,而它正在被另一个目标重新创建。
那时,我意识到使用“构建解决方案”会在解决方案中为每个项目生成一个 MSBuild.exe 进程。我认为这会使我在开始构建项目之前一劳永逸地生成foo/bar.cs 的尝试无效。
也许我忽略了什么?有没有一种方法可以实现“在全部构建之前生成foo/bar.cs?
【问题讨论】:
-
也许将文件放在一个公共库项目中,并让 15 个项目引用该库?这样你只需要在你的库项目中包含那个生成命令。
-
我会创建一个输出为 foo/bar.cs 的项目,然后让其他项目依赖于该项目...或将其放入库中(因为从语义上看,你是无论如何都想这样做)。
-
不幸的是,这比“将其放入库”要复杂一些。拥有另一个只做自定义
Build目标的项目很诱人。我会跟进的 -
VS 中的这种限制真的很糟糕......
标签: c# visual-studio-2012 msbuild