我已经确定,在我的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
是我的自定义集合标识符。我发现允许这样的事情当我使用开头提到的方法加载项目并运行时
project.GetItems "MyGroup"
我只有一个项目,即“ Test.txt”。除非我在fsproj中明确定义它们(即不使用通配符),否则其他文件不会被发现。
我是否也可以发现使用通配符包含的文件?我什至很高兴以未解决的形式获得它们。因此,获取“ TestFiles \ ** \ *”而不是与模式匹配的特定文件也可以。
答案 0 :(得分:1)
找到了解决方案。
首先,我要说问题就在我这一边。实际上,通常,当您尝试加载项目时,它也会加载所有文件。甚至那些使用通配符定义的,只要ofc匹配该模式。
这很重要:在我的应用程序中,我不使用普通的app
,而是使用更复杂的库。是的-图书馆做了一些神奇的事情导致了问题。
在这种情况下,问题很简单:所有*。[cs | fs] proj文件都已复制到collection.LoadProject
。仅*。[cs | fs] proj文件-少不了什么,仅此而已。结果,当项目加载器尝试评估解决方案时,根本没有任何文件可以进行模式匹配,从而导致元素为零。
这里的教训是:编写适当的MCVE非常重要-可以节省我一些时间(也许还可以节省您一些时间)。不好意思,伙计们!