gpt4 book ai didi

c# - 从项目中获取引用位置

转载 作者:行者123 更新时间:2023-11-30 22:24:09 28 4
gpt4 key购买 nike

我们为我们的一个主要系统提供了一个相当大的解决方案,我们终于开始做一些很久以前就应该做的事情了,但是嘿。

  • Main
    • Development (New development)
    • Service Pack (Bug fixing)
      • Release (locked down, curently what is with the clients)

我们刚刚得到了我们的主要解决方案,它没有错误(经过测试并为客户签署准备就绪),所以现在是时候实现它了。然而,我们的主要解决方案是这样的:

  • Main
    • Project A
      • Reference A (C:\DLLS)
      • Reference B (C:\DLLS)
      • Project B (Reference locally)
    • Project B
      • Reference A (C:\DLLS)
      • Reference B (C:\DLLS)

在我们有直接关系项目的地方,它们往往是我们应用程序的模块并在本地引用(项目 B)。外部引用是自定义实用程序类,它们不驻留在解决方案中,因此被构建并放在一个文件夹中(如果我们只有一个解决方案而不是现在我们正在考虑分支,这很好)。

The Problem

现在的问题是我正在分支,每个分支都将引用一个部分,并且不能逐个分支地更改代码。我希望能够加载当前的 MAIN 并查看它有哪些引用以及它们在解决方案中的位置,我尝试使用 reflectionAssemblies MAIN.EXE 但这只提供了引用的 .DLL 的信息,例如它们的名称,而不是项目期望它们所在的位置。然后我继续查看 Microsoft.Build.BuildEngine

  Project p = new Project();
//This is the cs/vb project file
p.Load(_projectPath);
var v = p.Imports;

这是不对的。本质上,我正在尝试获取给定项目文件的引用位置列表,关于我可以做什么的任何可能的建议?

最佳答案

我通过使用 Microsoft.Build.BuildEngine 成为了赢家 - 每个引用都是一个 BuildItem 并且具有名为 MetaData HintPath 提供了我所需要的。对于任何想尝试这个的人:

  Project p = new Project();
p.Load(_projectPath);
var buildItems = p.ItemGroups.Cast<BuildItemGroup>().Where(x => x.Cast<BuildItem>().Any(y => y.Name.ToLower().Contains("reference"))).Select(x => x.Cast<BuildItem>()).ToList();
var buildItemPaths = buildItems.SelectMany(x => x.Select(y => y.GetMetadata("HintPath").ToString())).ToList<string>();

这给了我我所需要的 - 希望也能帮助其他人。

关于c# - 从项目中获取引用位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12932630/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com