在我的 C# Wpf 專案中,我需要 C 的一些功能。所以我制作了自己的 C DLL 專案,名為 LibC。并且 Wpf 應用程式可以在我的電腦上正常運行。但是在測驗人員的計算機上,日志顯示:
Unable to load DLL 'LibC.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
我檢查了 DLL 檔案 LibC.dll 是否存在。通過檢查這篇文章:無法加載 DLL(找不到模塊 HRESULT:0x8007007E)
安東尼海沃德的回答給了我靈感。所以我運行下面dumpbin的命令,發現我的 dll 依賴于那些 4 Window 的 dll。而在測驗人員的計算機上,缺少兩個:vcruntime140d.dll和ucrtbased.dll. 在我的電腦上,可以找到所有四個 dll。所以我將丟失的兩個 dll 復制到測驗人員的計算機上,將它們與我的 LibC.dll 放在一起,然后應用程式現在運行良好。
我的問題是如何以更好的方式解決此類問題?正如我所說,我將丟失的 dll 檔案手動復制到測驗人員的計算機上。
另一種選擇是將這兩個dll放入我的專案中,并與我的專案檔案一起發布,包括exe檔案和LibC.dll。
是否可以將兩個丟失的 dll 靜態鏈接到我的 LibC.dll 中?或者有什么其他的建議?
"c:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\vc\Tools\MSVC\14.29.30133\bin\Hostx64\x64\dumpbin.exe" /DEPENDENTS libc.dll
Microsoft (R) COFF/PE Dumper Version 14.29.30143.0
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file libc.dll
File Type: DLL
Image has the following dependencies:
KERNEL32.dll
USER32.dll
VCRUNTIME140D.dll
ucrtbased.dll
Summary
1000 .00cfg
1000 .data
2000 .idata
1000 .msvcjmc
3000 .pdata
4000 .rdata
1000 .reloc
1000 .rsrc
A000 .text
10000 .textbss
uj5u.com熱心網友回復:
您的用戶將需要安裝Visual c 運行時。執行此操作的典型方法是使用靜默執行此操作的安裝程式。據我所知,它們無法編譯到您的程式中,并且許可證禁止在重新分發包之外分發丟失的 dll。
請注意,如果更新用于編譯 dll 的 Visual Studio 版本,則可能需要更新此包。
另請注意,您需要部署應用程式的發布版本,因為 dll 的除錯版本僅作為 Visual Studio 的一部分分發。
最后,純 .Net 代碼沒有這些問題,所以如果你有 c 代碼,最好用 c# 重寫它。如果您想訪問某些第三方 dll,最好直接使用 P/Invoke 來訪問該 dll。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/488524.html
