[英]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。
我想知道是否还有其他更好的方法呢?
我主要关心的是根据配置类型存储和管理引用。
我会这样做:
在名为“ 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.