use*_*105 3 c# visual-studio-2019 .net-core-3.1
我的示例控制台应用程序(例如 App1)使用 .Net Core 3.1 开发,它调用另一个 .NetCore dll(例如 Dll1)。我已添加“Copy Local = Yes”作为参考 dll。我使用 Visual Studio 2019 作为开发环境。
在直接场景中效果很好。意思是,当我在 App1 中设置“Copy Local = Yes”时。
我已在 GAC 中注册了 .Net Core dll (Dll1),并在 App1 中设置“Copy Local = No”。
现在我无法加载 .Net Core (Dll1) 并且它抛出以下异常。
未处理的异常。System.IO.FileNotFoundException:无法加载文件或程序集“xxxxx,版本= 1.0.0.0,文化=中性,PublicKeyToken = 66f432805192946d”。该系统找不到指定的文件。文件名:'xxxxx,版本=1.0.0.0,文化=中性,PublicKeyToken=66f432805192946d'位于xxxxx.Program.Main(String [] args)
我的疑问:
.Net Core是否支持GAC调用dll?
请帮助我解决这个问题。
问候,
哈里
你的问题
.Net Core 是否从全局程序集缓存 (GAC) 加载程序集?
简短的回答:
没有
长答案:
当您使用带有 set 的程序集时CopyLocal = false,这意味着程序集(.dll 文件)不会被放置到您刚刚构建的任何内容的输出目录中。
在这里,.Net Core 的行为与 .Net Framework 不同:
在.Net框架中
一旦在执行代码中的某个地方使用了缺少的程序集,运行时环境就会尝试搜索、查找并加载它。对于.Net Framework,这是以一种非常特定的方式发生的,其中包括在可用时从GAC(全局程序集缓存)加载它。
dotnetcore 是这样做的:
这些 dotnetcore 应用程序被设计为独立且易于处理,并且不想依赖其环境。您与他们一起提供他们需要知道的一切。因此,这些应用程序不会到处搜索丢失的 dll,也不会调查 GAC。这是正常的部署方式,这就是所谓的“自包含部署”
然而,有一种称为运行时包存储的东西,可以通过定义您的.Net Core应用程序不是“自包含的”,而是针对定义的“框架(=一组库所在的位置)进行部署来帮助优化您的部署。定义为存在)。这称为“依赖于框架的部署”
如果您需要 .Net Core 应用程序的框架相关部署的更多信息
| 归档时间: |
|
| 查看次数: |
1759 次 |
| 最近记录: |