ASP .NET CORE找不到包含自定义程序集的文件或程序集

23
我遇到了一个奇怪的问题。我自己构建了基于.NET Core的Web堆栈,打包成了一些.dll文件,现在想要从另一个ASP CORE解决方案中引用它们。
VS似乎可以找到这些程序集,我可以浏览类型等。我也可以无问题地构建项目,但是当IIS运行服务器时,我收到一个内部服务器错误,指出:
“FileNotFoundException:无法加载文件或程序集'myDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'。系统找不到指定的文件。”
这些引用的DLL文件在调试文件夹中,真正奇怪的是,如果我在与Web堆栈相同的解决方案中创建新的ASP Core项目,我可以引用和使用它而没有任何问题。
为什么仅在运行项目位于Web堆栈解决方案之外时才会发生这种情况?我该怎么做才能使其在任何地方都可运行?

3
你是否已将参考文献设置为复制到输出文件夹中?(请查看参考文献的属性) - Tseng
@Tseng 是的,我尝试过了。可惜没有什么区别。 - Tokfrans
@Tseng 确认。该库和Web项目都针对 .NETCoreApp 1.1 进行了定位。 - Tokfrans
@Tseng,这会有所不同吗?因为下面的答案是解决方案。我的库依赖关系仍然存在问题吗? - Tokfrans
如果所有的库都使用和以目标为netstandard,就不会有问题了。netstandard库可以用于netcoreapp,但反过来不行。netstandard也可以被net452全部所使用,但是netcoreapp不能。 - Tseng
显示剩余2条评论
2个回答

36

在 VS 2017 中的 .NET Core 工具(<15.3 预览版)/ .NET CLI <2.0 不完全支持引用磁盘上的程序集。您需要将库打包为 NuGet 包或使用项目引用 ("同一解决方案")。技术原因是所有所需的程序集和版本都在编译期间解析并写入 .deps.json 文件中。当加载任意程序集时,可能会失败,因为程序集或其依赖项找不到(或彼此冲突)。


没问题,我会尝试并回复。 - Tokfrans
10
这就是它。我在项目属性->包下勾选了生成NuGet包,并将包本地安装到我的新Web项目中。 - Tokfrans
我正在使用VS 2017 v15.3.5,这个问题在这个版本的VS中已经修复了吗?我这里也遇到了同样的问题。 - khoailang
2
在v15.4.0中遇到了相同的问题。 - Vesuvian
请注意,在ASP.NET Core 2.0.0中,使用razor视图中的引用dll文件存在其他问题,这些问题即将在服务发布中得到修复。 - Martin Ullrich
显示剩余2条评论

0

为了在 core 项目中加载外部的 dll,需要以下操作:

  1. 使用版本号为15.3或更高的 vs 2017。
  2. 在您的项目中安装 Microsoft.Extensions.DependencyModel NuGet 包。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接