.Net Core 3.0 NuGet DLL

时间:2019-07-09 20:07:31

标签: .net-core

假设我们在一个Console .Net Core应用程序中包含Nuget包Microsoft.Extensions.Configuration,在另一个Console .Net Core应用程序中包含相同的包。

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

Microsoft.Extensions.Configuration.Abstractions.dll
Microsoft.Extensions.Configuration.dll

在每个文件夹中。

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

是否有一种方法可以将这些dll整合到应用服务器的一个文件夹中,因此,当我们发布可执行文件时,我们要做的就是将可执行文件和配置文件移动到服务器上,它将在一个目录中找到这些dll。公用文件夹。设置dll路径的方式。

1 个答案:

答案 0 :(得分:1)

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

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

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

-c Release -f netcoreapp3.0 --self-contained false -r --runtime win-x64 -o <publisheFolder>

如果Visual Studio Publish Profile包含一个我们可以指定的文件夹(所有第三方和Nuget包DLL将驻留在此文件夹),除了Publish文件夹(该文件夹仅包含应用程序可执行文件,app dll,配置),这将非常有帮助。文件deps.json和runtimeconfig.json将驻留。如果CLI允许附加选项指定DLL文件夹,并且在指示--self-contained false时不包括运行时文件夹,则更好。

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