Visual studio 在自定义生成工具VS2012 MSBuild中使用筛选器元数据
我有一个问题我想很好地解决,但现在我不知道怎么做Visual studio 在自定义生成工具VS2012 MSBuild中使用筛选器元数据,visual-studio,visual-studio-2012,msbuild,msbuild-task,custom-build,Visual Studio,Visual Studio 2012,Msbuild,Msbuild Task,Custom Build,我有一个问题我想很好地解决,但现在我不知道怎么做 在我的C++解决方案(VS2012)中,我有一个项目,其中包含所有的DLL文件,这些文件必须复制到输出目录中才能完成部署。我还编写了一个小型定制工具来进行复制 实际问题是,我们必须为不同的配置(Win32/x64/Debug/Release)部署不同的.dll,并且必须手动为每个文件和每个配置设置ExcludedFromBuild属性。我想根据文件所在的过滤器自动设置此属性。为了更好地查看为哪个配置复制了哪个.dll,我将它们组织在具有以下结构的
在我的C++解决方案(VS2012)中,我有一个项目,其中包含所有的DLL文件,这些文件必须复制到输出目录中才能完成部署。我还编写了一个小型定制工具来进行复制
实际问题是,我们必须为不同的配置(Win32/x64/Debug/Release)部署不同的.dll,并且必须手动为每个文件和每个配置设置ExcludedFromBuild
属性。我想根据文件所在的过滤器自动设置此属性。为了更好地查看为哪个配置复制了哪个.dll,我将它们组织在具有以下结构的过滤器中
- Win32
- 调试
- 释放
- x64
- 调试
- 释放
vcxproj.filters
文件时,条目如下所示
<CopyFiles Include="..\bin.x64\icudt54d.dll">
<Filter>x64\Debug</Filter>
</CopyFiles>
但这从来都不起作用,在试图解决问题时,我发现%(CopyFiles.Filter)
总是空的,因为.vcxproj.filters
没有导入.vcxproj
文件中。我试图手动将导入添加到.vcxproj.filters
文件中,但随后VisualStudio中的过滤器完全搞乱了
是否有人知道一种方法可以在不破坏Visual Studio项目的情况下自动化此过程?.filters文件不参与构建过程,但可以通过XmlPeek任务将其作为任何xml文件查询。请尝试以下操作:
<Target Name="AddInputsAccordingToFilter">
<XmlPeek Namespaces="<Namespace Prefix='n' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/>"
XmlInputPath="$(MSBuildProjectFile).filters"
Query="/n:Project/n:ItemGroup/n:CopyFiles[starts-with(n:Filter, '$(Platform)')]/@Include">
<Output TaskParameter="Result" ItemName="FilesToCopy" />
</XmlPeek>
<ItemGroup>
<CopyFiles Include="@(FilesToCopy)"/>
</ItemGroup>
</Target>
考虑到此解决方案依赖于未记录的.filter文件格式
<Target Name="AddInputsAccordingToFilter">
<XmlPeek Namespaces="<Namespace Prefix='n' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/>"
XmlInputPath="$(MSBuildProjectFile).filters"
Query="/n:Project/n:ItemGroup/n:CopyFiles[starts-with(n:Filter, '$(Platform)')]/@Include">
<Output TaskParameter="Result" ItemName="FilesToCopy" />
</XmlPeek>
<ItemGroup>
<CopyFiles Include="@(FilesToCopy)"/>
</ItemGroup>
</Target>