.NET Core 7类库依赖Azure.Core,PowerShell加载运行报错求助
这个问题的核心是依赖项的部署和加载逻辑没匹配上,既不是类库制作的致命错误,也不是PowerShell操作完全错误,具体拆解如下:
问题根源
类库编译的默认行为
.NET Core类库默认编译时,只会输出自身的MyLibrary.dll、MyLibrary.pdb和MyLibrary.deps.json,依赖的NuGet包(比如Azure.Core)的DLL不会自动复制到输出目录——它们会留在NuGet缓存或项目的packages文件夹里。你的输出目录里没有Azure.Core.dll,所以运行时CLR找不到依赖。PowerShell
Add-Type的局限性Add-Type -Path只会加载你指定的单个DLL,它不会解析deps.json里的依赖清单,也不会自动去NuGet缓存或其他路径查找缺失的依赖项。所以即使输出目录里有deps.json,PowerShell也不会用它来定位Azure.Core。
解决办法
方法一:修改类库项目,让依赖自动复制到输出目录
在你的类库项目文件(.csproj)中添加以下配置,编译时会把所有依赖的NuGet包DLL复制到输出目录:
<PropertyGroup> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> </PropertyGroup>
重新编译后,把输出目录里的所有文件(包括Azure.Core.dll等依赖)都复制到C:\Temp,再用Add-Type -Path "C:\Temp\MyLibrary.dll"加载,就能正常运行了。
方法二:PowerShell中手动加载依赖DLL
先找到Azure.Core.dll的位置(通常在NuGet缓存路径:C:\Users\<你的用户名>\.nuget\packages\azure.core\1.37.0\lib\net7.0),先加载依赖再加载你的类库:
Add-Type -Path "C:\Users\<你的用户名>\.nuget\packages\azure.core\1.37.0\lib\net7.0\Azure.Core.dll" Add-Type -Path "C:\Temp\MyLibrary.dll"
注意:替换路径中的用户名和Azure.Core版本号为实际值
方法三:打包成自包含部署(可选)
如果需要更完整的打包,可以把类库打包成自包含部署(SCD),这样会把所有依赖包括.NET Core运行时都打包在一起。在项目文件中添加:
<PropertyGroup> <SelfContained>true</SelfContained> <RuntimeIdentifier>win-x64</RuntimeIdentifier> <!-- 根据系统选择,比如linux-x64 --> </PropertyGroup>
编译后把整个输出目录复制到目标路径,PowerShell加载时就能找到所有依赖。
内容的提问来源于stack exchange,提问作者wads

