如何在.NET解决方案中获取程序集的集合?

时间:2010-10-23 23:41:04

标签: c# .net visual-studio powershell

对于.NET解决方案,有没有办法获取解决方案中每个项目的所有.dll文件?例如,如果我制作一个空的.NET解决方案(这是Visual Studio 2010 btw),并添加3个名为“a”,“b”和“c”的项目,并构建每个项目,为我提供dll的a.dll,b .dll和c.dll,在C#或Powershell中是否有任何代码示例可以给我一些这些.dll的集合(但不是任何其他.dll,比如使用第三方库)?

由于

3 个答案:

答案 0 :(得分:2)

为此方案实施100%强大的解决方案很困难。由于人们利用MSBuild的灵活性,项目文件虽然通常很简单,但可能变得非常复杂。例如,对于同一项目,可以根据特定的构建设置构建具有非常不同名称的程序集。这使得在不了解整体构建上下文的情况下很难选择程序集名称。

然而,对于最直接的情况,以下powershell脚本将起到作用。确保它与指定的解决方案文件在同一目录中运行。

gc SomeProject.sln |
    ? { $_ -match "^Project" } |
    % { ($_.Split(","))[1].Trim().Trim('"') } |
    ? { $_ -match ".*proj" } |
    % { $x = [xml](gc $_); $x.Project.PropertyGroup[0].AssemblyName } |
    % { $_ + ".dll" }

答案 1 :(得分:0)

一种简单的方法(无需编写VS插件)将解析项目文件。项目文件(XML格式)将有一个名为ProjectReference的元素(常规引用位于另一个元素中,称为Reference):

<Project ...>
  <ItemGroup>
    <ProjectReference Include="..\path\YourProject.csproj">
      ...
    </ProjectReference>
  </ItemGroup>
</Project>

您可以使用工具集中的任何XML API解析此问题,并使用项目名称(Include属性)获取dll的名称。当然,只有当您的项目与dll具有相同的名称时,这才有效。如果没有,您可以打开csproj文件并找到元素<AssemblyName>

答案 2 :(得分:0)

使用EnvDTE命名空间怎么样?相关示例显示为here