我有一个.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 Local
到Yes
。引用的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的错误版本,这对我们没有帮助。
答案 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之一。
最适合我的解决方案:
.csproj
,其中包含引用。删除对项目的引用。cd
进入项目文件夹,并使用dotnet add reference ..\..\foo\bar.csproj
手动添加引用对我来说,这解决了问题。
答案 2 :(得分:1)
不确定这是否算作修复,但它至少是一种解决方法。
我没有引用DLL,而是简单地将类库的项目添加到控制台应用程序中,包括对控制台应用程序中类库项目的依赖引用以及清理/重建。工作正常。
显然,这不是针对专有DLL的修复,但它可能有所帮助。
答案 3 :(得分:0)
不确定是否正确;但是我的经验:
如果我的任何类库项目(作为对Web API项目的引用添加)引用了DLL /程序集(从本地路径)而不是通过NuGet进行添加,那么我还必须将所有这些DLL的引用添加到Web API项目,即使不需要。
附加内容:
如果Web API项目中没有引用单个DLL /程序集,则即使没有向Web API项目中添加程序集引用,一切也可以正常工作。但是,如果添加了任何单个程序集引用,那么我必须全部添加。
不确定这是否是预期的。决定分享经验,因为这里没有答案对我有用。