.net core .Net Core 3.0 NuGet DLL

.net core .Net Core 3.0 NuGet DLL,.net-core,.net Core,假设我们在Console.Net核心应用程序中包含Nuget软件包Microsoft.Extensions.Configuration,并在另一个Console.Net核心应用程序中包含相同的软件包 当我们发布这两个应用程序时,每个应用程序都会发布: Microsoft.Extensions.Configuration.Abstractions.dll Microsoft.Extensions.Configuration.dll 在每个文件夹中 如果我们有10个控制台应用程序使用同一个包,那么

假设我们在Console.Net核心应用程序中包含Nuget软件包Microsoft.Extensions.Configuration,并在另一个Console.Net核心应用程序中包含相同的软件包

当我们发布这两个应用程序时,每个应用程序都会发布:

Microsoft.Extensions.Configuration.Abstractions.dll
Microsoft.Extensions.Configuration.dll
在每个文件夹中

如果我们有10个控制台应用程序使用同一个包,那么这些DLL将位于应用服务器中的10个不同文件夹中。如果我们引用多个NuGet包,依赖项dll文件的数量将成倍增加


有没有办法将这些DLL整合到app server中的一个文件夹中,因此当我们发布可执行文件时,我们需要做的就是将可执行文件和配置文件移动到服务器上,服务器就会在公共文件夹中找到这些DLL。有点像设置dll路径。

考虑到Trispid的建议,我发布了一个我和老板都不完全满意的答案。但就我所知,目前整合这些DLL的方法是编写一个实用程序,将这些DLL移动到指定的公共DLL文件夹中,同时分别使用公共DLL文件夹的新位置路径和AdditionalProbingPath文件夹路径结构更新.deps.json文件和.runtimeconfig.json文件

我们无法手动执行此操作,因为要移动的DLL太多,编辑.deps.json文件太繁琐,每次发布Console应用程序解决方案时,该文件都会被删除。我已经编写了实用程序。不幸的是,这是公司的IP,所以我不能共享代码

其思想是枚举publish文件夹中的dll并将这些文件名存储在集合/字典中,然后使用该字典更新.deps.json中的运行时dll路径。对于CLI使用,我使用以下选项:

-c Release -f netcoreapp3.0 --self-contained false -r --runtime win-x64 -o <publisheFolder>
-c发行版-f netcoreapp3.0--自包含的false-r--运行时win-x64-o
如果Visual Studio发布配置文件包括一个我们可以指定的文件夹,所有第三方和Nuget软件包dll都将驻留在该文件夹中,那么除了发布文件夹外,这将非常有用,因为只有应用程序可执行文件、应用程序dll、配置文件、deps.json和runtimeconfig.json将驻留在该文件夹中。如果CLI允许其他选项指定DLL文件夹,并且在指示--self-contained false时不包括运行时文件夹,则更好


毕竟,DLL的主要目的不是让应用程序彼此共享代码吗?

那么你在寻找什么?是什么阻止你将所有可执行文件的/config放在同一个文件夹中?…这样,问题就解决了。是的,有点类似于GAC,但放在一个简单的文件夹中。同一文件夹中的executables/config的问题有点混乱,另外,每个.exe的配置文件名需要不同。而且,在同一个文件夹中有一堆DLL、一堆exe和一堆CONFIG,实际上会破坏文件系统的用途。作为一种解决办法,这是可以做到的。但在进一步研究这个链接之后,我们仍然希望将DLL放在一个文件夹中:提供了一个修复,即在appName.runtimeconfig.json中添加“AdditionalProbingPath”。但是,我们仍然需要将DLL运行时的完整路径放在appName.deps.json中。例如,类似这样的内容:“runtimes/win/lib/netstandard2.0/System.Threading.AccessControl.dll”可以更改为“C:\CoreDLL\System.Threading.AccessControl.dll”。通过更改这两个文件,DLL可以存放在一个公用文件夹中。但我们需要保存这些文件,因为它们在每一次publish@Yogi如果这回答了您的问题,您应该在下面创建一个答案并接受它,以便其他有相同问题的人可以轻松找到它。