找到并添加包含给定类型的.Net程序集的项目参考?

时间:2020-03-05 18:50:42  来源:igfitidea点击:

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

这是我目前的工作方式;

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

所以现在,大约30分钟后,我在想必须要有一种更快的方法...

解决方案

回答

这些解决方案浮现在我的脑海:

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

编辑:
刚刚在Codeplex上找到了2个很棒的工具Dependency Visualizer和Dependency Finder,我认为它们可以为我们提供很大的帮助。

编辑:
@edg,我完全误解了问题,因为我们丢失了csproj文件的引用,因此必须使用静态分析工具(例如NDepend)或者尝试在运行时分析依赖关系。

回答

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

.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>

回答

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

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

回答

除了从解决方案中删除项目文件之外,我们还可以卸载不使用的项目(右键单击该项目,然后选择"卸载项目")。只要已卸载的项目已构建一次,任何其他引用该项目的项目都将能够在项目的输出目录中找到该程序集并使用它进行构建。