在.NET Core Application中引用DLL时出现FileNotFoundException

时间:2017-05-25 09:11:14

标签: c# .net-core

我有一个.NET Core控制台应用程序和一个.NET Core类库。两者都是非常简单的单一类项目。两者都是新建的,全新安装了最新的.NET Core。两者都以.NET Core 1.1为目标。

每当我在应用程序中包含.NET Core类库时,就会在运行时发生此错误:

  

System.IO.FileNotFoundException:'无法加载文件或程序集   ' NAME,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'。该   系统找不到指定的文件。

构建任一项目都很好,Intellisense在包含using...语句后向我显示了类库的内容。编写引用和代码后,编译时没有问题。

我已在控制台应用程序中为引用的程序集设置Copy LocalYes。引用的DLL在运行时存在于控制台应用程序的bin文件夹中。

以下是csproj参考:

<Reference Include="NAME">
  <HintPath>path\bin\Debug\netcoreapp1.1\NAME.dll</HintPath>
  <Private>true</Private>
  <SpecificVersion>false</SpecificVersion>
</Reference>

这只适用于.NET Core DLL,我对.NET Framework 4.5绝对没有问题。*及以上。

有人能解释一下这个问题吗?我发现的任何有关此问题的SO / MSDN页面都存在特定问题,例如针对DLL的错误版本,这对我们没有帮助。

4 个答案:

答案 0 :(得分:5)

使用2.0之前的工具不支持在.NET Core应用程序中引用DLL文件。

原因是依赖图(deps.json文件)生成不包含这些文件,并且很可能无论如何都无法工作,因为它无论如何都无法合并引用的DLL的引用/依赖。

对于即将发布的2.0版本,只要您还引用原始软件包正在使用的所有DLL /软件包,此方案应该可以正常工作。语法如下:

<Reference Include="path/to/my.dll" />

.NET Core 2.0还支持以这种方式为.NET 4.6.1构建的引用程序集,但如果DLL使用不受支持的API调用,它可能会在运行时失败。

答案 1 :(得分:2)

经过大量挖掘,我找到了适用于我的.NET Core 2.0解决方案。

核心问题:我通过Visual Studio 2017添加了项目引用。在我的Web应用程序中,我引用了两个.NET Core库。当所有内容都编译时,在运行时,我得到一个FileNotFound异常,指向两个DLL之一。

最适合我的解决方案:

  • 关闭Visual Studio
  • 打开.csproj,其中包含引用。删除对项目的引用。
  • 从终端,cd进入项目文件夹,并使用dotnet add reference ..\..\foo\bar.csproj手动添加引用
  • 启动Visual Studio,构建并运行您的(网络)应用程序

对我来说,这解决了问题。

答案 2 :(得分:1)

不确定这是否算作修复,但它至少是一种解决方法。

我没有引用DLL,而是简单地将类库的项目添加到控制台应用程序中,包括对控制台应用程序中类库项目的依赖引用以及清理/重建。工作正常。

显然,这不是针对专有DLL的修复,但它可能有所帮助。

答案 3 :(得分:0)

不确定是否正确;但是我的经验:

如果我的任何类库项目(作为对Web API项目的引用添加)引用了DLL /程序集(从本地路径)而不是通过NuGet进行添加,那么我还必须将所有这些DLL的引用添加到Web API项目,即使不需要。

附加内容:
如果Web API项目中没有引用单个DLL /程序集,则即使没有向Web API项目中添加程序集引用,一切也可以正常工作。但是,如果添加了任何单个程序集引用,那么我必须全部添加。

不确定这是否是预期的。决定分享经验,因为这里没有答案对我有用。