在Visual Studio C#解决方案中,将项目依赖项的DLL引用替换为项目引用

在Visual Studio C#解决方案中,将项目依赖项的DLL引用替换为项目引用,c#,.net,vb.net,visual-studio,visual-studio-2015,C#,.net,Vb.net,Visual Studio,Visual Studio 2015,在Visual Studio C#/VB.NET解决方案中,是否可以通过编程将项目依赖项的DLL引用替换为项目引用 背景: 我正在处理一些遗留代码,其中每个项目的依赖关系大多作为编译DLL引用,而不是包含解决方案中相应项目的项目引用,甚至更糟糕的是,直接从GAC引用 现在,对于几十个项目中的每个解决方案,我必须手动删除每个DLL引用,并将其替换为VS UI中的项目引用 编辑project/solution XML.csproj/.sln文件并不简单,因为GUI: <!--typical D

在Visual Studio C#/VB.NET解决方案中,是否可以通过编程将项目依赖项的DLL引用替换为项目引用

背景:


我正在处理一些遗留代码,其中每个项目的依赖关系大多作为编译DLL引用,而不是包含解决方案中相应项目的项目引用,甚至更糟糕的是,直接从GAC引用

现在,对于几十个项目中的每个解决方案,我必须手动删除每个DLL引用,并将其替换为VS UI中的项目引用

编辑project/solution XML.csproj/.sln文件并不简单,因为GUI:

<!--typical DLL reference-->

<ItemGroup>
    <Reference Include="MyDLL, Version=2.0.1.0, Culture=neutral, PublicKeyToken=1b6d1e0267e1acba, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>...\MyDLL.dll</HintPath>
    </Reference>
</ItemGroup>

<!--typical Project reference-->

<ItemGroup>
    <ProjectReference Include="..\MyDLL\MyDLL.csproj">
      <Project>{3cc27830-3d6b-4071-85e5-5a4006f11142}</Project>
      <Name>MyDLL</Name>
    </ProjectReference>
</ItemGroup>

假的
…\MyDLL.dll
{3cc27830-3d6b-4071-85e5-5a4006f11142}
MyDLL

使用此插件。。这可能对你的问题有帮助

它的描述如下

将引用从文件切换到项目(反之亦然)引用 添加项目时。项目启动时,将恢复引用 删除

用法:

您正在开发一个项目,该项目具有对程序集的文件引用 “b.dll”。在某些时候,您需要对“b.dll”进行更改。那么你呢 将项目“B”添加到解决方案中。参考开关将检测到 项目B生成一个名为“B.dll”的程序集,并询问您是否需要 将所有引用从“b.dll”切换到项目b

然后,在以后的某个时候,您不再需要项目B 解决方案,因此删除项目B。参考切换器将 检测到对B的引用用于指向“B.dll”并询问您是否 您想更新它们

更多信息请点击此处:

编辑: 有很多插件可用于解决您的问题,请查看它们

或者全部搜索


您可以更改一些引用,并比较更改前后它们在.csproj文件中的列出方式。如果有一种模式可以让您进行泛化,您可以在自定义控制台应用程序或某些文本编辑器中使用正则表达式来替换它们。@爱丁项目哈希如何?我猜您指的是项目GUID-您可以通过查找元素ProjectGuid从单个项目文件中解析它们。这是可以编码的,但是这取决于您需要替换多少个项目,以及这样做的时间是否比编程一个自动化的解决方案要少得多。。。或者如果你因为某种原因需要一遍又一遍地做。别忘了,编写自动化解决方案更有趣:)“项目大多以编译DLL的形式引用,而不是包含项目引用”我不会对此发疯。在大型应用程序中,我会使用DLL引用,而不是项目引用。项目参考适用于小型、单一解决方案应用。创建解决方案的bin文件夹级别,并引用bin,然后构建到bin中。对于GAC部分,你是正确的。不要在GAC中注册你的东西,尤其是在开发和测试方面。想象一下,您创建了分发包,它在测试服务器上工作。但在部署上——不是。因为您没有打包DLL,而且它位于GAC的测试服务器上,所以我完全不同意您的看法。设计开发环境与在程序集中设计对象一样重要。DLL引用不会过时,因为您应该使用连续集成或定期生成。您从未将DLL存储在源代码管理中。只存储第三方。您的构建过程应该将DLL加载到网络驱动器中,然后您可以使用.bat文件来获取最新的DLL。您始终可以重建一个或多个项目。“转到定义”或“找到用法”-如果你设计的“蛋糕”很好,这是一个小问题。如果出于某种原因,您需要搜索整个代码库以查找某些代码的使用情况……这太棒了!让我看看他们中有没有人对我的案子有用。唯一的问题是,这两个插件可能与VS 2015不兼容。我希望他们会。。试着先用。。我认为……这完全是为了帮助你:)