在.net core 3.0中,默认的生成行为有了两个变化,一个是默认生成可执行文件,另一个是会复制依赖的Nuget项

前一个变化会默认生成可执行的exe,用起来更加方便了。另一个变化可能是为了减少复制到别的机器上不能运行的困惑而修改的。但这个变化会在程序目录带来一大堆依赖的dll文件, 下图演示我只引用的一个MongoDB.Driver库的时候,就额外带了了5个dll,尤其是当项目一大的时候,要想在引入的几十个dll中找到几个项目的dll是一件比较麻烦的事情。

而在.net core 2.x的时候,则只会生成项目相关的dll,也不影响exe的执行(拷贝到别的机器会因为缺少nuget的dll无法运行),看起来要清爽得多。

查了一下相关文档,可以恢复成以前的行为:在csproj文件中的PropertyGroup组中增加CopyLocalLockFileAssemblies配置,设置为false即可。

<PropertyGroup>
    <CopyLocalLockFileAssemblies>false</CopyLocalLockFileAssemblies>
</PropertyGroup>

设置了之后,就有一个新的问题了,如果发布的时候需要哪些依赖的nuget的dll该怎么办呢?和.net core 2.x时候一样,使用dotnet publish发布即可。

 

更新:

在.net 6.0之前,用这种方式生成exe文件还是可以运行的,因为在开发环境中会自动生成的{exe}.runtimeconfig.dev.json文件,其中中提供了nuget包搜索路径,但从.net 6程序开始,默认就不生成此配置文件了,则会出现找不到dll的错误了, 要解决这个问题,我们可以通过设置GenerateRuntimeConfigDevFile为true来强制开启runtimeconfig.dev.json的输出

<PropertyGroup>
    <GenerateRuntimeConfigDevFile>true</GenerateRuntimeConfigDevFile>
</PropertyGroup>

 

posted on 2019-09-20 23:53  天方  阅读(1034)  评论(0编辑  收藏  举报