我已经为这个问题创建了一个解决方法。这只适用于VS2010,而不是之前的版本,因为它需要MSBuild 4。
首先,创建一个名为Configure.xslt
的文件,并添加以下内容。
<?xml version="1.0" encoding="utf-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msbuild="http://schemas.microsoft.com/developer/msbuild/2003">
<xsl:output version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="/msbuild:Project">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:copy-of select="." />
</xsl:template>
<xsl:template match="msbuild:ItemGroup[@Label = 'ProjectConfigurations']">
<xsl:copy-of select="document('Default.props')/msbuild:Project/msbuild:ItemGroup[@Label = 'ProjectConfigurations']" />
</xsl:template>
</xsl:transform>
现在,创建一个名为
Default.props
的文件,并添加以下内容。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" InitialTargets="Configure" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<Target Name="Configure" Condition="Exists('$(MSBuildThisFileDirectory)Configure.xslt')" Inputs="$(MSBuildProjectFile);$(MSBuildThisFileFullPath);$(MSBuildThisFileDirectory)Configure.xslt" Outputs="$(MSBuildProjectFile);$(OutDir)">
<Message Text="Configuring $(MSBuildProjectFile)..." />
<XslTransformation XslInputPath="$(MSBuildThisFileDirectory)Configure.xslt" XmlInputPaths="$(MSBuildProjectFile)" OutputPaths="$(MSBuildProjectFile).tmp" />
<Move SourceFiles="$(MSBuildProjectFile).tmp" DestinationFiles="$(MSBuildProjectFile)" />
<MakeDir Directories="$(OutDir)" />
</Target>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
</Project>
这个文件是您项目的“属性表”,包括配置等所有公共属性。请根据需要自定义它。重要部分是
<Target>
节点(创建名为
Configure
的新目标)和
<Project>
节点中的
InitialTargets
属性(告诉 MSBuild 最初执行
Configure
目标)。
之后,将
Configure.xslt
和
Default.props
移动到您选择的目录中。
最后,在所有项目中使用以下模板。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="Directory\Default.props" />
<ItemGroup Label="ProjectConfigurations" />
</Project>
从VS提示符中,运行一个初始的
msbuild
来填充你的文件配置,否则VS IDE将无法打开你的项目(因为同样的缺陷促使了这个解决方法)。或者,你的模板可能包含任何虚假配置,只是为了让IDE最初能够打开项目--效果是相同的。
已知注意事项:你不能使用IDE创建每个项目的配置(因为IDE会强制将任何找到的配置分组在
ProjectConfigurations
标签下)。你可以直接在项目文件的XML数据中创建它们,并且只要你不将它们标记为
ProjectConfigurations
,它们就不会被替换或删除。
<ProjectConfiguration>
项使用MSBuild构建我们的系统。我希望有人找到了一种方法来在VS IDE中加载项目。由于我们正在赶时间,我正在编写批处理脚本和XSLT来将<ItemGroup>
添加到678个.vcxproj项目中。 - Dylan Bourque