C# 整理你的程序包

VS版本:2017

C#打包比較簡單,直接把debug或者release目錄裏面的東西拷貝出來,就可以使用了。但是這樣的包很雜,我們期望把指定的dll文件放到指定的目錄下,把指定的配置文件放到指定的目錄下,把不必要的文件比如.pdb調試文件排除在外,那麼該怎麼做呢。

1.隨便創建一個項目,有三個程序集,其中ClassLibrary1和ClassLibrary2是被引用的類庫。如下:

PublishPackageTest引用ClassLibrary1和ClassLibrary2。

2.把項目配置修改爲release:

設置ClassLibrary1的輸出目錄爲PublishPackageTest目錄下的Release\Module1目錄,設置ClassLibrary2的輸出目錄爲PublishPackageTest目錄下的Release\Module2目錄。我們的目的是把ClassLibrary1和ClassLibrary2生成的dll存放在項目包的兩個不同的子目錄下:

..\表示相對路徑的意思。

3.點擊上一步截圖紅框位置的高級,做如下設置:

其中調試信息設置爲無之後,就不再打包.pdb文件了。

ClassLibrary1和ClassLibrary2做同樣的設置。

4.項目引用dll的位置,複製本地設置爲false,兩個都要設置。如下:

5.ClassLibrary1類庫通過nuget包安裝Newtonsoft.Json這個類庫,這個dll的屬性裏面複製本地仍然設置爲false。

這個包我們期望在生成的時候單獨放到程序包目錄下的Package子目錄下。所以要在項目生成後,把它的dll拷貝到這個目錄下。右鍵項目ClassLibrary1=》屬性=》生成事件。在生成後事件裏面加上一句:

copy /y 
$(SolutionDir)packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll 
$(SolutionDir)PublishPackageTest\bin\Release\Package

 

意思是把項目目錄下的Newtonsoft.json.dll拷貝到生成目錄下的Package目錄下。

6.ClassLibrary2項目裏面添加一個配置文件MyConfig.config,然後在這個項目的生成後事件裏面加上一句拷貝的語句,像上一步的寫法一樣,將它拷貝到程序包目錄下的Config目錄下。

copy /y 
$(ProjectDir)MyConfig.config 
$(SolutionDir)PublishPackageTest\bin\Release\Config

關於如何加載指定目錄下的配置文件,參考我的另一篇博客:https://blog.csdn.net/dap769815768/article/details/85157445

7.所有的這些搞好之後,就是在項目的配置文件裏面加上環境變量了,在PublishPackageTest項目的App.config文件裏面加上一句:

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="Module1;Module2;Package;Config"/>
    </assemblyBinding>
  </runtime>

8.重新生成文件,你會發現你的程序包比原來清爽了很多。下面是最終的打包文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章