【问题标题】:Visual Studio Conditional Project Configuration EditorVisual Studio 条件项目配置编辑器
【发布时间】:2011-12-20 23:50:47
【问题描述】:

我有一个项目,其中包含许多引用,它们都是有条件的,显示我手动编辑了 Proj 文件,如下所示,

  <ItemGroup Condition=" '$(Configuration)' == 'Release' ">
    <Reference Include="Assembly1">
      <HintPath>..\Release\Path\Assembly1</HintPath>
    </Reference>
    <Reference Include="Assembly2">
      <HintPath>..\Release\Path\Assembly2</HintPath>
    </Reference>
  </ItemGroup>
  <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
    <Reference Include="Assembly1">
      <HintPath>..\Debug\Path\Assembly1</HintPath>
    </Reference>
    <Reference Include="Assembly2">
      <HintPath>..\Debug\Path\Assembly2</HintPath>
    </Reference>
  </ItemGroup>

注意,这只是一个示例,只有两个配置,发布和调试,目前我们每个平台有 4 个配置,我们正在处理大约 12 个配置,其中 3 个用于 .NET 3.5、.NET 4 和 .NET 4.5

不知道有没有比这个更好的方法?

  1. 是否有任何 Visual Studio 插件允许我们在某种 UI 中进行这些配置,而不是编辑 xml,因为它变得日益复杂。
  2. MSBuild 中是否有任何脚本或任何可能读取某些自定义 xml 或某些数据存储的内容,我们可以自动执行此过程?
  3. 如果我为不同的配置创建不同的 VSProj 文件,那么确保正确添加内容文件非常耗时,但唯一的问题是引用。
  4. 是否有任何其他工具可以轻松管理每个配置的引用?

我主要关心的是,根据配置类型存储和管理引用。

【问题讨论】:

  • 也许是时候使用NAnt...
  • NAnt 是否与 Visual Studio 集成,是否有一些更简单的 UI 形式?
  • 我不知道 Visual Studio 是否存在插件。 NAnt 有一些 GUI(参见:nant.sourceforge.net/external.html),主要是 NAntBuilder。但我怀疑是否有一个适合您的需要。

标签: visual-studio msbuild


【解决方案1】:

我会这样做:

在名为“Common.props”的文件中

<Project ...>
  <ItemGroup> 
    <Reference Include="Assembly1"> 
      <HintPath>..\$(Configuration)\Path\Assembly1</HintPath> 
    </Reference> 
    <Reference Include="Assembly2"> 
      <HintPath>..\$(Configuration)\Path\Assembly2</HintPath> 
    </Reference> 
  </ItemGroup> 
</Project>

您可以将其放入一个单独的 Common.props 文件中,如图所示,并使用 Import 元素将其“包含”到您的所有项目文件中,因此有一个维护点,如下所示:

<Project ...>
  <PropertyGroup>
    <Configuration Condition="'$(Configuration)' == ''>Debug</Configuration>
    ...other properties
  </PropertyGroup>
  <Import Project="Common.props" />
  ...rest of your C# project file
</Project>

上面显示的导入位置的重要之处在于它发生在 $(Configuration) 的默认值定义之后,如果没有指定,则在导入中提供适当的值。您当然可以将这个默认值声明以及更多内容移到 Common.props 文件中。如果您始终如一地执行此操作,您的项目文件通常会变成略多于 4 个属性(项目 Guid、命名空间、程序集名称、项目类型)、一个导入、要编译的文件列表以及任何不常见的程序集引用或项目引用。我的项目通常不会有任何条件属性,因为它们几乎总是可以被分解为共享导入。

没有很好的 UI 可以做到这一点,VS IDE UI 非常有限,我已经开始从不使用它来更改任何项目属性,而是依赖自定义工具,通常是自定义 MSBuild 任务来检查项目文件以确保它们一致,并使用 PowerShell 脚本修改它们以进行常见更改。

摘自本书MSBuild Trickery技巧#14 - 18

编辑:添加导入说明

【讨论】:

  • 你能发布如何编写导入元素吗?
  • 非常感谢布莱恩,我会试试这个,即使我讨厌写条件项,但问题是 VS 在引用其他项目作为项目参考时没有选择正确的调试和发布版本。然后在最终产品上,我们得到了调试和发布版本的混合,而不是预期的正确配置。有没有办法使用配置变量来引用项目及其输出?而不是引用dll?这是我的另一个头疼问题。
  • 请注意,Visual Studio(我今天使用的是 2013)似乎会缓存引用并在您更改配置时保留它们,因此如果引用具有不同的名称和如果它们一起包含在同一配置中,通常会产生该错误。只需重新启动 Visual Studio。
  • 其实好像是Resharper的问题。
  • 这个答案极大地帮助了组织现有的 Visual Studio 解决方案!可以在 Visual Studio 解决方案中实现DRY principle 非常方便,我不知道这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 2011-03-10
  • 2011-06-05
  • 1970-01-01
相关资源
最近更新 更多