用于批量替换VS,C#解决方案中的DLL引用。这是一篇使用指南。
介绍可以看这里

使用步骤

  1. 选择替换方式为 工程引用替换HintPath 还是 文件
  2. 选择用于替换的 dll 或者 csproj 文件。
  3. 点击替换。
  4. 如果想撤销,点击撤销。

工程引用替换

首先你的有这个工程的源码,替换及把引用方式由 dll 引用转换为工程引用,可以非常方便地调试源代码。


以下假设你选定的要替换的DLL文件名是 Pikachu.Net.dll

HintPath引用替换

  • 它干了什么?
    找到解决方案中所有的工程文件(csproj文件),将其中有关于Pikachu.Net.dll的引用,替换为你指定的目录中的引用。像下面这样(使用的是相对路径):
1
2
3
<Reference Include="Pikachu.Net, Version=2.1.5.192, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\Pikachu.Net.2.1.5.192\lib\NET45\Pikachu.Net.dll</HintPath>
</Reference>

替换为:

1
2
3
4
<Reference Include="Pikachu.Net, Version=2.1.5.192, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\Pikachu.Net</HintPath>
</Reference>

这跟手动替换DLL引用的效果是一样的。
这时VS会提示你重新加载解决方案,重新加载之,之后此解决方案中所有的引用就是新指定的引用了。

  • 撤销是怎么做的?
    因为替换的操作,其实就是对csproj文件的操作,撤销,就是把csproj恢复原样咯。
    这里使用的是git命令checkout。
    所以,不要对csproj文件做什么更改(即不要修改工程配置,不要添加文件,不要删除文件),否则,撤销的时候,会失去这些对csproj文件的更改。哎呀,竟然有那么多不能做,看来得优化一下撤销方式了。

  • 常见的提示:
    如果在替换之前,有未提交的对csproj文件的修改,是不能进行替换操作的,不用担心,会有提示。

文件替换

  • 它干了什么?
    将解决方案中所有Debug目录下的Pikachu.Net.dll文件,替换为指定的Pikachu.Net.dll文件。
    为什么只有Debug目录下的文件?主要是为了方便调试使用,如果Debug目录下的dll文件只是一个副本,真正的引用在别的地方(如Nuget引用),那,这种替换方式可能是无效的。

  • 撤销是怎么做的?
    第一次替换时(只有第一次,重新打开扩展则重新计算),会先备份之前Debug目录下的Pikachu.Net.dll文件,撤销的时候,替换回来就好了。

相关知识:

There is a search order for assemblies when building. The search order is as follows:

  • Files from the current project – indicated by ${CandidateAssemblyFiles}.
  • $(ReferencePath) property that comes from .user/targets file.
  • %(HintPath) metadata indicated by reference item.
  • Target framework directory.
  • Directories found in registry that uses AssemblyFoldersEx Registration.
  • Registered assembly folders, indicated by ${AssemblyFolders}.
  • $(OutputPath) or $(OutDir)
  • GAC

相关链接: