在Visual Studio中将外部配置复制到本地项目?

时间:2014-03-24 18:49:29

标签: c# visual-studio-2010 visual-studio visual-studio-2012

在大约50-100个项目中创建构建配置的最简单方法是什么(相同的解决方案)如果Visual Studio已经从另一个项目中检测到构建配置?

我们的团队在几个解决方案中使用了一组常见项目(名称空间简单地是#34; Common")。 Common命名空间拥有自己的主解决方案,并具有自己的一组构建配置。 Common的解决方案包含五种构建配置(" Debug-QA"," Debug-Dev"等)。

每当在新解决方案中使用这些项目时(即#34; MyNewSolution"),Visual Studio将显示Common公司主解决方案的构建配置。遗憾的是,尚未在MyNewSolution或MyNewSolution的任何项目中创建这些配置。这会将构建配置添加到其他项目或包含这些构建配置中的项目时产生问题,因为如果名称已存在,则无法创建构建配置(Visual Studio认为这样做,这要归功于Common包括的项目)。

我的目标是将相同的配置(即#34; Debug-QA"," Debug-Dev"等)添加到MyNewSolution及其项目中,以便所有项目和解决方案匹配。我能看到这样做的唯一方法是在每个新项目上手动创建构建配置......这是因为MyNewSolution有大约50-100个项目所以是折磨。

仅供参考:我使用的是Visual Studio 2012

3 个答案:

答案 0 :(得分:3)

这更像是一个黑客而不是一个正确的解决方案,但你总是可以:

  1. 使用GUID作为名称为整个解决方案创建所需配置的副本。
  2. 从已具有原始配置的项目中删除副本(撤消更改)。
  3. 使用"在文件中查找/替换"将GUID重命名为原始配置的名称。工具。
  4. 即使它不是一个非常可行的选择,但这是一个非常好的快速解决方案。

    修改

    如何从解决方案中手动删除配置:

    在文本编辑器中打开解决方案文件后,您将看到一个名为Global的块,其中包含部分。 SolutionConfigurationPlatforms部分包含配置的定义。还有一个名为ProjectConfigurationPlatforms的部分,其中分配了配置。只需从两个组中删除对配置的引用即可。如果您有更复杂的解决方案,可能还有其他参考要删除。这只是一个基本案例。

    如何从项目中手动删除配置: 同样,在文本编辑器中打开项目文件后,您将看到许多对要删除的配置的引用。 C#项目的PropertyGroup配置为条件。您可以完全删除该组。可能还有其他对文件周围配置的引用,因此请确保正确清理所有内容。

    如果出现问题,请确保备份文件。

答案 1 :(得分:2)

如果目标配置的项目级别定制很少,那么通过MSBuild Import element导入到各个项目中的外部化配置可能最难管理。

为了允许特定于项目的覆盖,应将此导入放置在项目文件的顶部附近。 e.g:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="..\..\CommonConfig.targets" Condition="Exists('..\..\CommonConfig.targets')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    ...

遗憾的是,这将要求您编辑一次所有项目文件以添加Import。但是,一旦完成此操作,您就可以将配置添加到导入的.targets文件中,并使其自动传播到所有项目。

答案 2 :(得分:2)

我不能告诉你哪种方法最适合你,但我可以从经验中说,当你不让Visual Studio编写时,从旧的解决方案空间创建50多个项目的新解决方案空间变得非常容易项目文件。相反,您可以使用现成的第三方软件来读取您提供的一些配置文件,并在几秒钟内吐出解决方案和您需要的所有项目,所有项目都按您需要的方式进行配置。

当您只想编译公共项目时,同一软件也会生成独立的“通用”解决方案。

正确的软件将为您提供makefile在设置项目时提供的灵活性和强大功能,但您仍然可以在Visual Studio中完成工作。

我在该角色中广泛使用过CMake,但是对于C ++而不是C#。我对CMake非常满意;我在具有50多个项目的环境中使用它,其源代码分散到目前为止,我使用脚本来查找所有项目,其中一些第三方库作为预编译的DLL或LIB引入。另外,根据我的经验,我知道没有什么可以阻止某人同时维护自己手工制作的一组VS项目文件,如果他们真的想要相同的源代码。但是,您当然可以自己购买适合您环境的最佳软件。

将数十个项目从手工制作的项目文件转换为更像makefile的系统是一项重要的时间投入,但在需要多次重新配置或重新组合项目的环境中,我觉得投资回报相当快。