.Net core 程序Nuget包獨立存放 (一)


我之前在文章在生成.net core 3.0程序時不包含nuget庫中介紹過如何在開發的時候,輸出目錄中不包含nuget程序包,這種方式的輸出非常清晰,但只能適用於開發環境,再運行環境還是得包含所有的程序集。周末的時候,抽空研究了下如何在運行環境下也能使用這種清晰的發布方式。

首先研究了一下nuget包的搜索方式,當采用不包含nuget庫的方式是,build的時候會在"{exe}.runtimeconfig.dev"文件中增加了額外的程序集搜索路徑:

{
  "runtimeOptions": {
    "additionalProbingPaths": [
      "C:\\Users\\Admin\\.dotnet\\store\\|arch|\\|tfm|",
      "C:\\Users\\Admin\\.nuget\\packages"
    ]
  }
}

這種方式在.net fx程序中也是支持的,具體可以看我之前的文章:配置.net程序集搜索路徑。.net core 程序啟動的時候,首先會根據系統指定的程序集加載位置去搜索依賴的程序集,找不到的時候,會從上面配置的額外的搜索路徑再尋找。而這兩個路徑就是開發環境下nuget的緩存,這就是開發開發環境能運行它的原因。

這兩個路徑中,第一個稍微特殊些:

"C:\\Users\\Admin\\.dotnet\\store\\|arch|\\|tfm|"

這兩個豎線是指代的模板,前面個指定的是rid,后面指的是程序framwork,例如,當前程序對應的路徑映射的是

"C:\\Users\\Admin\\.dotnet\\store\\x64\\netcoreapp3.1"

另外,這個配置並非一定要放在"{exe}.runtimeconfig.dev"文件中,也可以直接合並到"{exe}.runtimeconfig"文件中。

有了基礎后,我們就可以得知,要實現nuget程序集獨立存放,需要進行如下兩步:

  1. build的時候講nuget包分離出來,存放在額外的路徑。
  2. 在runtimeconfig中指定改路徑為程序集搜索路徑

其中第2步相對簡單,直接修改json配置文件就可以,在build機器上加一個小程序就可以完成。

難點是第一步,一個簡單的方式是:如果自己生成的程序集文件名有特定前綴的話,可以根據名稱規則來區分,這種方式也不是不行,但不夠完善,擔心它不靠譜。限於篇幅所限,在下一篇文章中我再介紹下如何分離nuget程序包。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM