我发现在我的C#/F#代码中,我可以使用下面的方法加载任何.NET项目的信息:
collection.LoadProject(path_to_my_proj_file)
其中 collection
的类型为 ProjectCollection
。 然后我可以访问项目及其所有依赖项中定义的所有属性和项。例如,我可以通过以下方式访问所有通过Compile
包含的文件:
project.GetItems "Compile"
假设我想在我的fsproj文件中定义自定义的ItemGroup:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
<ItemGroup>
<MyGroup Include="Test.txt" />
<MyGroup Include="TestFiles\**\*" />
</ItemGroup>
</Project>
一些注释:
MyGroup
是我自定义的集合标识符。我已经发现这样的事情是允许的。- "TestFiles" 文件夹包含4个文件,它们都存在于某些子文件夹中,但它们都匹配模式 "TestFiles\**\*"
当我使用我之前提到的方法加载项目并运行时
project.GetItems "MyGroup"
我只得到了一个项目,那就是“Test.txt”。其他文件不会被发现,除非我在fsproj中明确地定义它们(即不使用通配符)。
有没有办法让我也能使用通配符来发现包含的文件?我甚至可以接受以未解决的形式获取它们。所以获取“TestFiles\ ** \ *”而不是匹配模式的特定文件也可以。