从项目中获取参考位置

时间:2012-10-17 10:48:14

标签: c# reflection branch .net-assembly

对于我们的一个主要系统,我们有一个很大的解决方案,我们终于做了一些应该在很久以前完成的事情,但是嘿。

  
      
  • 主   
        
    • 发展(新发展)
    •   
    • Service Pack(错误修复)   
          
      • 释放(锁定,与客户有关)
      •   
    •   
  •   

我们刚刚得到了我们的主要解决方案,我们已经无错误(经过测试并为客户准备好了签名),所以现在正是实现这一目标的最佳时机。我们的主要解决方案是这样的:

  
      
  • 主   
        
    • 项目A.   
          
      • 参考A(C:\ DLLS)
      •   
      • 参考B(C:\ DLLS)
      •   
      • 项目B(参考本地)
      •   
    •   
    • 项目B.   
          
      • 参考A(C:\ DLLS)
      •   
      • 参考B(C:\ DLLS)
      •   
    •   
  •   

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

  

问题

现在的问题是我正在分支,每个分支都将引用一个部分,并且代码不能在逐个分支的基础上进行更改。我希望能够加载当前MAIN并查看它有哪些参考资料以及它们在解决方案中的位置,我尝试使用reflectionAssemblies作为{{1}但是,它只提供引用的.DLL的信息,例如它们的名称,而不是项目期望它们的位置。然后我继续看MAIN.EXE

Microsoft.Build.BuildEngine

哪个不是正确的东西。基本上我正在尝试获取给定项目文件的参考位置列表,我可以做什么可能的建议?

1 个答案:

答案 0 :(得分:3)

我使用Microsoft.Build.BuildEngine赢得了胜利者 - 每个引用都是BuildItemMetaData名为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>();

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