加载包含作为通配符的项的 .NET 项目
Loading a .NET project with items included as wildcards
我发现在我的 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\**\*" 而不是与模式匹配的特定文件也很好。
找到解决方案。
首先声明问题出在我这边。事实上,通常当您尝试加载一个项目时,它确实也会加载所有文件。即使是那些用通配符定义的,只要 ofc 匹配模式。
事情是这样的:在我的应用程序中,我不使用普通的 collection.LoadProject
,而是使用更复杂的库。是的 - 图书馆做了一些导致问题的神奇事情。
在这种情况下,问题很简单:所有 *.[cs|fs]proj 文件都被复制到 C:\temp\<random_folder_name>
。只有 *.[cs|fs]proj 文件 - 仅此而已。因此,当项目加载器尝试评估解决方案时,根本没有文件可以进行模式匹配,导致元素为零。
这里的教训是:编写适当的 MCVE 很重要 - 会为我(可能还有你)节省一些时间。很抱歉有问题,伙计们!
我发现在我的 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\**\*" 而不是与模式匹配的特定文件也很好。
找到解决方案。
首先声明问题出在我这边。事实上,通常当您尝试加载一个项目时,它确实也会加载所有文件。即使是那些用通配符定义的,只要 ofc 匹配模式。
事情是这样的:在我的应用程序中,我不使用普通的 collection.LoadProject
,而是使用更复杂的库。是的 - 图书馆做了一些导致问题的神奇事情。
在这种情况下,问题很简单:所有 *.[cs|fs]proj 文件都被复制到 C:\temp\<random_folder_name>
。只有 *.[cs|fs]proj 文件 - 仅此而已。因此,当项目加载器尝试评估解决方案时,根本没有文件可以进行模式匹配,导致元素为零。
这里的教训是:编写适当的 MCVE 很重要 - 会为我(可能还有你)节省一些时间。很抱歉有问题,伙计们!