2016-02-19 82 views
0

我有一个正在部署到Azure的Web项目。它也有一个与之相关的webjob。他们都使用了一个名为foo.dll的DLL,但是webjob项目使用了稍微旧版本的foo.dll。网络作业项目是一个完全不同的VS解决方案。VisualStudio - 如何指定用作参考的dll的路径

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

所以我必须在以下位置foo.dll:

  • MySolution/MyWebProject /依赖/ foo.dll
  • MySolution/MyWebProject/App_Data文件/工作/触发/ MyWebJob/foo.dll

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

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

回答

0

好的,所以我解决了它使用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文件夹。希望这可以帮助别人。

0

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

+0

.NET 4.6。我已经尝试了一次彻底的清理和重建。我尝试删除所有引用,从Dependencies文件夹中删除dll,执行clean,然后添加dll,引用它们,然后构建。它构建得很好,但运行时抛出MissingMethodException。如果我删除了webjob文件夹,它可以很好地工作。它发生在本地和Azure上。经过进一步调查,VS或msbuild正在将错误的dll复制到bin文件夹 - 但是当我删除webjob文件夹时,它会复制正确的文件夹。 – littlecharva