Visual Studio 2013 Reference Hell - 它一直在寻找任何不存在的旧版本的 DLL - 为啥?

Posted

技术标签:

【中文标题】Visual Studio 2013 Reference Hell - 它一直在寻找任何不存在的旧版本的 DLL - 为啥?【英文标题】:Visual Studio 2013 Reference Hell - It keeps finding an older version of the DLL that does not exist anyhwere - Why?Visual Studio 2013 Reference Hell - 它一直在寻找任何不存在的旧版本的 DLL - 为什么? 【发布时间】:2019-03-28 00:43:21 【问题描述】:

我有一些源代码放在共享驱动器上,映射到 F 驱动器。

我有一堆我构建的程序集,位于:F:\Development\OurProject\Assemblies\Projects\Release

在这个文件夹中是这个特定的 dll:Common.Themes.dll(以及相应的 Common.Themes.pdb)。我昨晚刚刚进行了完整的构建,所以两者的日期都是 2018 年 10 月 22 日晚上 7:47。该 dll 的产品版本和文件版本为 5.0.6869.33817

在我开发的这个 VM 中,我有一个 C: 驱动器。我刚刚在这个驱动器中搜索了任何 Common.Themes.dll,所以我可以从这个 C: 驱动器中删除它们。我什至关闭了我所有的项目,以便我可以删除在这里找到的任何 dll:C:\Users\justlooking\AppData\Local\Microsoft\VisualStudio\12.0\ProjectAssemblies

我还删除了以下所有内容:C:\Users\justlooking\AppData\Local\Temp\

此计算机上该 dll/pdb 的唯一实例位于:C:\Users\justlooking\Documents\Visual Studio 2013\Projects\MyThemeTest\

随便...

在这个 F 盘我这里有以下解决方案:F:\Development\OurProject\UserProfiles\UserProfiles.sln

在这个解决方案中,我们有两个项目文件\文件夹:

F:\Development\OurProject\UserProfiles\UserProfiles

F:\Development\OurProject\UserProfiles\TestContainer

在我打开解决方案之前,我从两个位置删除了 bin/obj 文件夹(TestContainer 是启动项目 - UserProfiles 不引用此 DLL)。

正如我所提到的,TestContainer 确实引用了 Common.Themes.DLL。今天早上,我已经多次删除了引用并通过浏览/导航到 Assemblies 文件夹重新添加了它。

打开解决方案后,bin/obj 文件夹会重新创建,如果我转到 TestContainer 的 bin 文件夹,所有引用都会立即放置在那里。目前,我看到 Common.Themes.DLL 的日期为 2018 年 10 月 22 日晚上 7:47。到目前为止一切顺利!

我去按下绿色播放按钮(调试/构建项目)它还在绿色播放按钮旁边显示 Internet Explorer,因为它会默认打开 IE。

VS 完成构建后,我查看 TestContainer\bin 文件夹,10/22/2018 7:47PM dll 被替换为日期为 10/9/2018 8:40PM

pdb 是 10/22/2018 7:47PM,但 dll 是 10/9/2018,不同的大小(显然)和不同的版本 (5.0.6856.35405)。较旧的版本。这是唯一这样做的文件。

为什么哦,为什么要这样做???我不能让它停下来。我不知道它是从哪里得到的以及如何得到的。

谢谢。

【问题讨论】:

在您进行调试构建后,您引用的 DLL 的路径是否会改变?是否有任何其他引用的项目引用了您的 Common.Themes.DLL? 按下绿色播放按钮后,我从解决方案资源管理器中选择引用,并在路径的属性窗口中显示:F:\Development\OurProject\Assemblies\Projects\Release\Common.Themes .dll ...所以不是吗?这太奇怪了。我什至不知道它从哪里得到这个文件。该文件在任何地方都不存在。 用记事本打开项目配置,看看是否有复制文件的说明。 因此,当您的应用程序查找 DLL:docs.microsoft.com/en-us/windows/desktop/Dlls/… 时,会发生大量的操作。但首先,重启你的机器。打破所有那些潜在的 VS 错误驱动的文件锁。如果这不起作用,请查看该文档。 使用一个好的文本编辑器为您的解决方案目录执行 Find In Files,并在解决方案中的每个文件中搜索 Common.Themes.dll 以查看是否存在对旧版本的引用。尝试使用 sysinternals procmon 来监视将旧 dll 放置在您知道的位置的文件事件,然后看看您是否可以根据放置它​​的 exe 的名称来确定它是如何出现的 【参考方案1】:

好的,根据@Caius Jard 所说的,我在解决方案目录中进行了“在文件中查找”。令我惊讶的是,TestContainer .csproj 两次引用了 Common.Theme。

当我重新添加参考资料时,我看到它得到了更新:

<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="Common.Controls, Version=5.0.5493.35273, Culture=neutral, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\Assemblies\Projects\Release\Common.Controls.dll</HintPath>
</Reference>
<Reference Include="Common.Themes, Version=5.0.6869.33817, Culture=neutral, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\Assemblies\Projects\Release\Common.Themes.dll</HintPath>
</Reference>

所有正确的版本,并且 HintPath 使用的是相对路径。凉爽的。这就是我检查 .csproj 文件时的重点。

但现在我意识到,如果我滚动到底部,我会看到:

<ItemGroup>
  <CustomReference Include="Gizmox.WebGUI.Forms">
    <HintPath>F:\Development\AWayOlderVersion\UserProfiles\TestContainer\bin\Gizmox.WebGUI.Forms.dll</HintPath>
    <Visible>false</Visible>
  </CustomReference>
  <CustomReference Include="Gizmox.WebGUI.Forms.Themes">
    <HintPath>F:\Development\AWayOlderVersion\UserProfiles\TestContainer\bin\Gizmox.WebGUI.Forms.Themes.dll</HintPath>
    <Visible>false</Visible>
  </CustomReference>
  <CustomReference Include="Common.Themes">
    <HintPath>F:\Development\AnOlderVersion\UserProfiles\TestContainer\bin\Common.Themes.dll</HintPath>
    <Visible>false</Visible>
  </CustomReference>
</ItemGroup>

F:\Development\AnOlderVersion\ ... 仍然存在。所以它是从那里拉出来的。

我不明白为什么会有这些“CustomReferences”,并且在删除那个 ItemGroup(所以所有三个 customreference 的)之后,它似乎工作正常。

【讨论】:

创建这些项目时,它是 Visual Studio 2013 之前的版本。我想知道这是否是旧版 Visual Studio 的遗留问题(即使我使用升级实用程序来帮助我我升职时的项目) 这是在你的整个职业生涯中可能不会再发生的事情之一.. :) 但你解决了它真是太好了! 谢谢@CaiusJard ...如果你想在 cmets 之外加入一些东西,我会用绿色复选标记勾住你 - 因为你确实给了我制作文件的想法在解决方案中搜索! 知道它受到赞赏并得到一些感谢的话对我来说比分数更有价值:) 太好了。非常感谢。非常感谢。

以上是关于Visual Studio 2013 Reference Hell - 它一直在寻找任何不存在的旧版本的 DLL - 为啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Visual Studio 2013或Visual Studio 2017设置TFS 2013

Visual Studio 2013 Tools for Unity安装目录,Visual Studio 2013 Tools.unitypackage

使用Visual Studio2013打开Visual Studio2015项目

从 Visual Studio 2013 转换到 Visual Studio 2015 的问题

Intel parallel studio 2017 集成在visual studio 2013 中,现在如何集成到visual studio 2015

求助visual studio2013怎么设置参考线,以及怎么自定义代码配色