[英]FileNotFoundException when referencing DLL in .NET Core Application
我有一個 .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 的錯誤版本,這無濟於事。
使用 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 調用,它可能會在運行時失敗。
經過大量挖掘,我找到了適合我的 .NET Core 2.0 解決方案。
核心問題:我通過Visual Studio 2017添加了項目引用。在我的web應用中,我引用了兩個.NET Core庫; 當一切都編譯時,在運行時,我得到一個指向兩個 DLL 之一的 FileNotFound 異常。
對我有用的解決方案:
.csproj
。 刪除對項目的引用。cd
進入項目文件夾並手動dotnet add reference ..\\..\\foo\\bar.csproj
,使用dotnet add reference ..\\..\\foo\\bar.csproj
對我來說,這解決了這個問題。
不確定這是否算作修復,但至少是一種解決方法。
我沒有引用 DLL,而是簡單地將類庫的項目添加到控制台應用程序,在控制台應用程序中包含對類庫項目的依賴項引用並清理/重建。 工作正常。
顯然,這不是專有 DLL 的修復程序,但它可能會有所幫助。
不確定正確與否; 但我的經驗:
如果我的任何類庫項目(作為對 Web API 項目的引用添加)引用 DLL/程序集(從本地路徑)而不是通過 NuGet 添加,那么我還必須將所有這些 DLL 的引用添加到 Web API 項目,即使並不需要。
除了以上:
如果 Web API 項目中沒有引用單個 DLL/程序集,那么即使不向 Web API 項目添加程序集引用,一切都可以正常工作。 但是,如果添加了任何單個程序集引用,那么我必須添加所有引用。
不確定這是否是預期的。 決定分享經驗,因為這里沒有任何答案對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.