c# - 加载包含作为通配符的项目的 .NET 项目
问题描述
我已经发现,在我的 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 匹配模式。
这是交易:在我的应用程序中,我不使用 plain collection.LoadProject
,而是使用更复杂的库。是的 - 图书馆做了一些导致问题的神奇东西。
在这种情况下,问题很简单:所有 *.[cs|fs]proj 文件都被复制到C:\temp\<random_folder_name>
. 只有 *.[cs|fs]proj 文件 - 仅此而已。结果,当项目加载器尝试评估解决方案时,根本没有要进行模式匹配的文件,从而导致零元素。
这里的教训是:编写一个合适的 MCVE 很重要——可以节省我(可能还有你)一些时间。对于问题,伙计们深表歉意!
推荐阅读
- django - django rest框架中的文件路径不一致
- redhat - 为什么 Redhat Openstack Platform 需要在 Director 机器上安装 Openstack?
- javascript - Handling methods/return from function without running the function every time?
- python - 利用 lambda 函数优化矩阵数学 - Pandas
- c# - Swift 是否支持将自定义类型解构为元组?
- python - 从 zip 文件中提取到列表
- javascript - 如何使用 Javascript 只重新加载一次网页?
- api - Binance的24小时百分比变化是如何计算的
- maven - 为现有项目模块生成父 pom
- python - 有效地将 numpy 数组从 (a, b, c) 重塑/重新排序为 (a, c, b)