在.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發布即可。