C# 加载包含通配符项的.NET项目

C# 加载包含通配符项的.NET项目,c#,.net,f#,msbuild,msbuild-api,C#,.net,F#,Msbuild,Msbuild Api,我发现在我的C/F代码中,我可以使用 collection.LoadProject(path_to_my_proj_file) 其中,collection属于ProjectCollection类型。然后,我可以访问项目中定义的所有属性和项及其所有依赖项。例如,我可以通过以下方式通过Compile访问包含的所有文件 project.GetItems "Compile" 假设我想在我的fsproj文件中定义一个自定义项目组: <?xml version="1.0" encoding="ut

我发现在我的C/F代码中,我可以使用

collection.LoadProject(path_to_my_proj_file)
其中,
collection
属于
ProjectCollection
类型。然后,我可以访问项目中定义的所有属性和项及其所有依赖项。例如,我可以通过以下方式通过
Compile
访问包含的所有文件

project.GetItems "Compile"
假设我想在我的fsproj文件中定义一个自定义项目组:

<?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>
我只得到一项,那就是“Test.txt”。其他文件不会被发现,除非我在fsproj中明确定义它们(即没有通配符)

有没有一种方法可以让我也使用通配符来发现包含的文件?我甚至很高兴能以未解决的形式得到它们。因此,获取“TestFiles\***”而不是与模式匹配的特定文件也很好。

找到了解决方案

首先,让我说问题在我这边。事实上,通常当您尝试加载项目时,它也会加载所有文件。即使是用通配符定义的,只要ofc与模式匹配

这里的交易是:在我的应用程序中,我不使用普通的
集合.LoadProject
,而是使用更复杂的库。是的,图书馆做了一些神奇的事情导致了这个问题

在这种情况下,问题很简单:所有的*.cs | fs]proj文件都被复制到
C:\temp\
。只有*[cs | fs]proj文件-没有更少,没有更多。结果,当项目加载器尝试评估解决方案时,没有模式匹配的文件,导致零元素

这里的教训是:写一篇合适的MCVE很重要——这会节省我(或许你也一样)一些时间。为问题道歉,伙计们

project.GetItems "MyGroup"