【问题标题】:Locate and add project reference for .Net assembly containing a given type?为包含给定类型的 .Net 程序集找到并添加项目引用?
【发布时间】:2010-09-08 09:53:29
【问题描述】:

我正在处理一个大型(270 多个项目)VS.Net 解决方案。是的,我知道这是在推动与 VS 的友谊,但它是继承的,等等。无论如何,为了加快解决方案的加载和编译时间,我已经删除了所有我目前没有处理的项目......这反过来又从我想要保留的项目中删除了这些项目引用。所以现在我正在经历一个令人麻木的过程,将二进制引用添加到保留的项目中,以便可以找到引用的类型。

这是我目前的工作方式;

  • 尝试编译,得到数千 错误,“缺少类型或命名空间”
  • 复制错误的第一行 列表到剪贴板
  • 使用连接到 热键 (AHK) 我从中提取类型名称 错误消息并将其存储在 Windows 剪贴板中
  • 我将类型名称粘贴到源代码中 洞察符号浏览器并注意 包含类型的程序集
  • 我回到 VS 并添加 程序集作为二进制引用 相关项目

所以现在,大约 30 分钟后,我认为必须有一个更快的方法......

【问题讨论】:

  • 哇,你是个圣人,我的解决方案中有 25 个项目,我已经准备好对最后 3 个项目的人进行恶意攻击

标签: c# .net visual-studio


【解决方案1】:

我想到了这些解决方案:

  • 您可以尝试使用Dependency Walker 或类似的程序来分析依赖关系。
  • 解析 MSBuild 文件 (*.csproject) 以获取依赖项列表

编辑:
刚刚在 codeplex 上找到了 2 个很酷的工具 Dependency VisualizerDependency Finder 我认为它们可以为您提供很大的帮助。

编辑:
@edg,我完全误读了您的问题,因为您丢失了 csproj 文件中的引用,您必须使用 NDepend 等静态分析工具或尝试在运行时分析依赖关系。

【讨论】:

  • 是的,很酷,感谢您的建议。仅当引用已经存在时扫描 csproj 才有效,在我的情况下它们不存在。使用depends.exe 之类的工具扫描DLL 并不比使用source Insight 好。还是谢谢。
  • 是的,我误读了你的问题,我道歉。您是否尝试使用 Dependency Walker 在运行时分析依赖关系?
【解决方案2】:

不,目前没有内置的更快方法。

我建议不要修改现有解决方案,而是使用与您要处理的项目重复(例如重命名和编辑)的新项目创建新解决方案。如果您发现包含数百个项目的解决方案对您来说是个问题,那么您可能只需要处理一个子集。从几个新项目开始,添加二进制(不是项目)引用并从那里开始。

【讨论】:

    【解决方案3】:

    您可以尝试的一件事是在记事本中打开旧的 .csproj 文件并将 ProjectReference 标记替换为 Reference 标记。如果您可以编写解析器,请随时分享。 :)

    .csproj 文件中的条目如果是项目引用

      <ItemGroup>
        <ProjectReference Include="..\WindowsApplication2\WindowsApplication2.csproj">
          <Project>{7CE93073-D1E3-49B0-949E-89C73F3EC282}</Project>
          <Name>WindowsApplication2</Name>
        </ProjectReference>
      </ItemGroup>
    

    如果是程序集引用,则进入 .csproj 文件

      <ItemGroup>
        <Reference Include="WindowsApplication2, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
          <SpecificVersion>False</SpecificVersion>
          <ExecutableExtension>.dll</ExecutableExtension>
          <HintPath>..\WindowsApplication2\bin\Release\WindowsApplication2.dll</HintPath>
        </Reference>   </ItemGroup>
    

    【讨论】:

      【解决方案4】:

      您可以卸载不处理的项目(右键单击项目并选择卸载项目),而不是从解决方案中删除项目文件。只要卸载的项目已经构建一次,任何其他引用它的项目都可以在项目的输出目录中找到该程序集并使用它进行构建。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多