【问题标题】:How can I get a collection of the assemblies in my .NET solution?如何在我的 .NET 解决方案中获取程序集的集合?
【发布时间】:2010-10-24 10:22:49
【问题描述】:

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

谢谢

【问题讨论】:

  • 这是什么意思?使用 Fuslogvw.exe。
  • 您可以通过执行构建并解析输出来获取它们吗?这会将其缩小到特定的配置/平台,您可以轻松地解析构建输出的日志输出,而不是解析项目文件上的条件。

标签: c# .net visual-studio powershell


【解决方案1】:

很难针对这种情况实施 100% 稳健的解决方案。项目文件虽然通常很简单,但随着人们利用 MSBuild 的灵活性而变得非常复杂。例如,在给定特定构建设置的情况下,同一项目可能会构建具有非常不同名称的程序集。这使得在不了解整体构建上下文的情况下很难选择程序集名称。

但是,对于最直接的情况,以下 powershell 脚本可以解决问题。确保它与指定的解决方案文件在同一目录中运行。

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

【讨论】:

  • 是的,您需要的两件事是每个项目中的OutputPathAssemblyName。但即使在最简单的情况下,输出路径也会根据选择的配置和平台而改变(例如:调试与发布)。
【解决方案2】:

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

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

您可以使用工具集中的任何 XML API 简单地解析它,并使用项目名称(Include 属性)获取 dll 的名称。当然,这只有在您的项目与 dll 同名时才有效。如果没有,您可以打开csproj 文件并找到元素&lt;AssemblyName&gt;

【讨论】:

    【解决方案3】:

    使用EnvDTE 命名空间怎么样?一个相关的例子显示在here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-29
      • 2011-11-16
      • 1970-01-01
      • 2010-10-16
      • 2018-07-16
      • 2017-03-15
      • 2015-05-11
      • 2023-03-19
      相关资源
      最近更新 更多