如何用通配符配置Bond生成的C#文件与Bond文件关联显示
批量配置Bond生成C#文件与原Bond文件的Visual Studio关联
我正在使用Bond工具,它会读取项目根目录下的.bond文件,在obj文件夹的对应中间输出路径中生成带_types后缀的C#文件,示例结构如下:
Foo.bond \obj\x64\Debug\net6.0\win10-x64\ Foo_types.cs
我希望在Visual Studio中让这些生成的C#文件作为对应Bond文件的子项显示。单个文件对的配置很简单,示例如下:
<ItemGroup> <None Include="$(IntermediateOutputPath)\Foo_types.cs"> <DependentUpon>Foo.bond</DependentUpon> <Link>Foo_types.cs</Link> </None> </ItemGroup>
但如果文件数量多,逐个配置太繁琐,如何用通配符/glob模式批量配置?需要自动去掉C#文件名的_types后缀,关联到对应的Bond文件,当前配置模板中DependentUpon节点的内容该怎么写?
解决方案
使用MSBuild的字符串替换功能来处理文件名,完整的批量配置如下:
<ItemGroup> <None Include="$(IntermediateOutputPath)\*_types.cs"> <DependentUpon>$([System.String]::Copy('%(Filename)').Replace('_types', '')).bond</DependentUpon> <Link>%(Filename)%(Extension)</Link> </None> </ItemGroup>
说明
这里通过$([System.String]::Copy('%(Filename)').Replace('_types', ''))调用MSBuild的内置字符串处理方法:
%(Filename)会获取当前匹配到的C#文件的文件名(比如Foo_types)- 调用
Replace('_types', '')把文件名中的_types后缀移除,得到原Bond文件的名称(比如Foo) - 最后拼接
.bond,就能正确关联到项目根目录下对应的Foo.bond文件
内容的提问来源于stack exchange,提问作者abatishchev
相关产品推荐
相关产品推荐

