【发布时间】:2014-03-07 13:02:46
【问题描述】:
似乎从 VS2010 和 MSBuild 4.0 开始,VisualStudio 和 MSBuild 能够解析和构建不在解决方案中的项目引用。
让我们创建一个更具体的示例。创建一个名为 Solution1 的解决方案,其中包含一个名为 A 的 C# 项目和另一个名为 B 的项目。在 project B 中,添加对 project A 的引用。现在创建一个名为 Solution2 的新解决方案并单击“添加现有项目”并选择 Project B。在解决方案资源管理器和警告列表中可以看到一个警告。
诀窍在于,即使“警告为错误”,我们也能够构建 Solution2.sln。其实项目A是找到的 并由 Visual Studio 或 MSBuild 构建。让我们通过打开 VS2010/VS2012 命令行并执行以下命令来验证这一点:
msbuild <dirPathToSolution1> Solution1.sln /t:clean **cleaning up solution1 with project A"
msbuild <dirPathToSolution1> Solution2.sln /t:build
ProjectA 是有效构建的,更糟糕的是:上面提到的警告甚至没有在那里提出。使用以前版本的 Visual Studio 不会发生这种情况(我已经使用 msbuild 3.5 和 VS2008 对其进行了测试)。
但是,在我们的情况下,我们希望防止此类事情发生。事实上,我们有一个包含多个解决方案和许多提交者的大型源存储库。我们正在重新组织我们的依赖关系,最终旨在提取更小的存储库。同时,我们不希望开发人员在没有看到的情况下添加隐藏的项目依赖项。我们希望只允许解决方案“内部”的项目引用,而将其他依赖项留给程序集引用。
所以问题是“有没有办法阻止像 Solution2 这样的解决方案构建?”。理想情况下,它不应同时与 VS2012 和 MSBuild 一起编译。然而,由于我们的持续集成,仅涉及 MSBuild 命令行的解决方案就可以解决。
【问题讨论】:
标签: visual-studio-2010 visual-studio visual-studio-2012 build msbuild