繁体   English   中英

Visual Studio条件项目配置编辑器

[英]Visual Studio Conditional Project Configuration Editor

我有一个项目,其中包含许多参考,并且所有参考都是有条件的,表明我手动编辑了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>

请注意,这只是一个示例,只有两个配置,即Release和Debug,目前每个平台有4种配置,我们正在处理将近12种配置,其中3种用于.NET 3.5,.NET 4和.NET 4.5。

我想知道是否还有其他更好的方法呢?

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

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

我会这样做:

在名为“ 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个以上的属性(Project Guid,命名空间,程序集名称,项目类型),导入,要编译的文件列表以及任何不常用的程序集引用或项目引用。 我的项目中通常不会包含任何条件属性,因为几乎总是可以将它们分解为共享导入。

没有一个好的用户界面可以做到这一点,VS IDE用户界面非常有限,我从来没有使用它来更改任何项目属性,而是依靠自定义工具,通常是自定义MSBuild任务来检查项目文件以确保它们是一致的,PowerShell脚本可以对其进行修改以进行常见更改。

摘自《 MSBuild Trickery技巧#14-18》一书

编辑:添加了导入说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM