Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法从.NetCore应用程序中的GAC加载dll_C#_Visual Studio 2019_.net Core 3.1 - Fatal编程技术网

C# 无法从.NetCore应用程序中的GAC加载dll

C# 无法从.NetCore应用程序中的GAC加载dll,c#,visual-studio-2019,.net-core-3.1,C#,Visual Studio 2019,.net Core 3.1,我的示例控制台应用程序(比如App1)是使用.NETCore3.1开发的,它调用另一个.NETCoreDLL(比如Dll1)。我已经添加了“Copy Local=Yes”作为参考dll。我使用VisualStudio2019作为开发环境 它在直接场景中运行良好。是指,当我在App1中设置“Copy Local=Yes”时 我已经在GAC中注册了.Net核心dll(Dll1),并在App1中设置了“Copy Local=No” 现在我无法加载.NETCore(Dll1),它抛出以下异常 未处理的异

我的示例控制台应用程序(比如App1)是使用.NETCore3.1开发的,它调用另一个.NETCoreDLL(比如Dll1)。我已经添加了“Copy Local=Yes”作为参考dll。我使用VisualStudio2019作为开发环境

它在直接场景中运行良好。是指,当我在App1中设置“Copy Local=Yes”时

我已经在GAC中注册了.Net核心dll(Dll1),并在App1中设置了“Copy Local=No”

现在我无法加载.NETCore(Dll1),它抛出以下异常

未处理的异常。System.IO.FileNotFoundException:无法加载文件或程序集“xxxxx,版本=1.0.0.0,区域性=中性,PublicKeyToken=66f432805192946d”。系统找不到指定的文件。 文件名:“xxxxx,版本=1.0.0.0,区域性=neutral,PublicKeyToken=66f432805192946d” 在xxxxx.Program.Main(字符串[]args)

我的疑问是:

.NETCore是否支持从GAC调用dll

请帮我解决这个问题

问候,


哈里

你的问题

.Net Core是否从全局程序集缓存(GAC)加载程序集

简短的回答:

没有

长答案:

当使用设置了
CopyLocal=false
的程序集时,这意味着程序集(.dll文件)将不会被放置到刚生成的任何程序集的输出目录中

此处,.Net Core的行为与.Net Framework不同:

在.Net框架中

一旦在执行代码中的某个地方使用了缺少的程序集,运行时环境将尝试搜索、查找并加载它。对于.Net Framework,这是在一个非常特定的环境中发生的,包括在可用时从GAC(全局程序集缓存)加载它

dotnetcore就是这样做的:

那些dotnetcore应用程序设计成独立的、易于处理的,并且不想依赖于他们的环境。你提供了他们需要知道的一切。因此,这些应用不会四处搜索丢失的DLL,也不会调查GAC。这是正常的部署方法,称为“自包含部署”

但是,有一种称为的方法可以帮助优化您的部署,方法是定义您的.Net核心应用程序不是“自包含”的,而是根据定义的“框架”(=其中定义了一组库)。这称为“依赖于框架的部署”

如果您需要有关.Net核心应用程序的框架相关部署的更多信息

看看这个
你的问题

.Net Core是否从全局程序集缓存(GAC)加载程序集

简短的回答:

没有

长答案:

当使用设置了
CopyLocal=false
的程序集时,这意味着程序集(.dll文件)将不会被放置到刚生成的任何程序集的输出目录中

此处,.Net Core的行为与.Net Framework不同:

在.Net框架中

一旦在执行代码中的某个地方使用了缺少的程序集,运行时环境将尝试搜索、查找并加载它。对于.Net Framework,这种情况会在非常特定的情况下发生,包括在可用时从GAC(全局程序集缓存)加载它

dotnetcore就是这样做的:

那些dotnetcore应用程序设计为独立的、易于处理的应用程序,并且不希望依赖于其环境。您可以将他们需要了解的所有信息与它们一起提供。因此,这些应用程序不会四处搜索丢失的DLL,也不会查看GAC。这是正常的部署方法,称为“自包含部署”

但是,有一种称为的方法可以帮助优化您的部署,方法是定义您的.Net核心应用程序不是“自包含的”,而是根据定义的“框架”(即定义了一组库的位置)进行部署。这称为“依赖于框架的部署”

如果您需要有关.Net核心应用程序的框架相关部署的更多信息

看看这个

.NET Core没有GACFrist的概念。试着了解一下.NET Core和.NET framework之间的区别。NET Core没有GACFrist的概念。试着了解一下.NET Core和.NET framework之间的区别