【问题标题】:VisualStudio - How to specify the path to dlls that are uses as referencesVisual Studio - 如何指定用作引用的 dll 的路径
【发布时间】:2016-02-19 17:11:43
【问题描述】:

我有一个要部署到 Azure 的 Web 项目。它还有一个与之关联的网络作业。它们都使用名为 foo.dll 的 DLL,但 webjob 项目使用稍旧的 foo.dll 版本。 webjob 项目在一个完全不同的 VS 解决方案中。

为了简化我的部署过程,我已将 webjob bin 文件添加到我的 web 项目的 App_Data 文件夹中,以便在部署 webjob 时也是如此。

所以我在以下位置有 foo.dll:

  • MySolution/MyWebProject/Dependencies/foo.dll
  • MySolution/MyWebProject/App_Data/jobs/triggered/MyWebJob/foo.dll

然后,我将对 Dependencies 文件夹中的 foo.dll 的引用添加到 Web 项目中。它构建得很好,但是当我运行/调试它时,我在 Dependencies/foo.dll 版本中存在但在 MyWebJob/foo.dll 版本中不存在的方法上得到了 MissingMethodException。

如何确保在我的应用中使用正确的 dll?

【问题讨论】:

    标签: .net visual-studio dll


    【解决方案1】:

    您能否提供有关您正在运行的 .net 框架版本的详细信息? 我会尝试以下事情 1) 检查 azure 实例是否运行与本地相同的 .net 版本 2) 尝试干净、重建依赖 dll 以清除任何陈旧的 dll。

    【讨论】:

    • .NET 4.6。我已经尝试过彻底清洁和重建。我尝试删除所有引用,从 Dependencies 文件夹中删除 dll,执行清理,然后添加 dll,引用它们,然后构建。它构建得很好,但在运行时会抛出 MissingMethodException 。如果我删除 webjob 文件夹,它会完美运行。它发生在本地和 Azure 上。经过进一步调查,VS 或 msbuild 将错误的 dll 复制到 bin 文件夹 - 但是当我删除 webjob 文件夹时,它会复制正确的。
    【解决方案2】:

    好的,所以我使用 DLL 版本号解决了这个问题,并手动编辑了 csproj 文件。最初,csproj 中的引用如下所示:

    <Reference Include="Foo">
      <HintPath>Dependencies\Foo.dll</HintPath>
    </Reference>
    

    我开始在 Foo.dll 中增加程序集版本号,然后编辑我的 csproj 文件以包含所需的版本号和一行告诉它要使用特定版本:

    <Reference Include="Foo, Version=1.0.0.1">
      <SpecificVersion>True</SpecificVersion>
      <HintPath>Dependencies\Foo.dll</HintPath>
    </Reference>
    

    现在,它将正确的 DLL 复制到 bin 文件夹。希望这可以在某个时候对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 2021-10-27
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 2010-10-01
      • 2022-07-22
      相关资源
      最近更新 更多