多项目开发下的dll文件管理
- DS01:為什么要對生成的dll文件進行管理?
- DS02:首先介紹以下兩個DOS命令
- DS03:第一種實現(xiàn)方法(xcopy)
- DS04:第二種實現(xiàn)方法(attrib)
- DS05:分享一個有意思的東西
- DS06:您可能需要了解的其他知識
有時候,我們需要將編譯后的文件和dll拷貝到一個集中的地方,這一點對于多項目開發(fā)來講很有幫助。
回到頂部
DS02、首先介紹以下兩個DOS命令: 》attrib attrib指令的格式和常用參數(shù)為 ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [[drive:] [path] filename] [/S [/D]] + 設置屬性。 - 清除屬性。 R 只讀文件屬性。 A 存檔文件屬性。 S 系統(tǒng)文件屬性。 H 隱藏文件屬性。 I 無內容索引文件屬性。 [drive:][path][filename] 指定要處理的文件屬性。 /S 處理當前文件夾及其子文件夾中的匹配文件。 /D 處理文件夾。 /L 處理符號鏈接和符號鏈接目標的屬性。 attrib命令的幫助文檔: 基本功能:顯示或更改文件屬性。 常用用法:attrib -r 文件路徑\文件名 舉例說明: 我們在C盤根目錄下面建了一個文件test.txt,其屬性頁如下: 此命令操作可以將其只讀屬性去掉: PS:想要查看命令的幫助文檔,命令為:命令名 /? 》xcopy C:\Users\shenjl>xcopy /? 復制文件和目錄樹。 XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W][/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U][/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B][/EXCLUDE:file1[+file2][+file3]...]source 指定要復制的文件。destination 指定新文件的位置和/或名稱。/A 僅復制有存檔屬性集的文件,但不更改屬性。/M 僅復制有存檔屬性集的文件,并關閉存檔屬性。/D:m-d-y 復制在指定日期或指定日期以后更改的文件。如果沒有提供日期,只復制那些源時間比目標時間新的文件。/EXCLUDE:file1[+file2][+file3]...指定含有字符串的文件列表。每個字符串在文件中應位于單獨的一行。如果任何字符串與復制文件的絕對路徑的任何部分相符,則排除復制該文件。例如,指定如 \obj\ 或 .obj 的字符串會分別排除目錄obj 下面的所有文件或帶有 .obj 擴展名的所有文件。/P 創(chuàng)建每個目標文件之前提示您。/S 復制目錄和子目錄,不包括空目錄。/E 復制目錄和子目錄,包括空目錄。與 /S /E 相同。可以用來修改 /T。/V 驗證每個新文件的大小。/W 提示您在復制前按鍵。/C 即使有錯誤,也繼續(xù)復制。/I 如果目標不存在,且要復制多個文件,則假定目標必須是目錄。/Q 復制時不顯示文件名。/F 復制時顯示完整的源文件名和目標文件名。/L 顯示要復制的文件。/G 允許將加密文件復制到不支持加密的目標。/H 也復制隱藏文件和系統(tǒng)文件。/R 覆蓋只讀文件。/T 創(chuàng)建目錄結構,但不復制文件。不包括空目錄或子目錄。/T /E 包括空目錄和子目錄。/U 只復制已經(jīng)存在于目標中的文件。/K 復制屬性。一般的 Xcopy 會重設只讀屬性。/N 用生成的短名稱復制。/O 復制文件所有權和 ACL 信息。/X 復制文件審核設置(隱含 /O)。/Y 取消提示以確認要覆蓋現(xiàn)有目標文件。/-Y 要提示以確認要覆蓋現(xiàn)有目標文件。/Z 在可重新啟動模式下復制網(wǎng)絡文件。/B 復制符號鏈接本身與鏈接目標相對。/J 復制時不使用緩沖的 I/O。推薦復制大文件時使用。開關 /Y 可以預先在 COPYCMD 環(huán)境變量中設置。 這可能被命令行上的 /-Y 覆蓋。 xcopy命令的幫助文檔基本功能:復制文件和目錄樹。
常用用法:xcopy -r -y 原始文件夾\文件名 目標文件夾
舉例說明: xcopy -r -y test.txt ..\map\bin\ 此命令可以將當前文件夾下面的test.txt文件復制到父級目錄下面的map\bin\文件夾下面,如果有同名文件直接覆蓋,并且不給出覆蓋提示。 回到頂部 ? DS03、第一種實現(xiàn)方法(xcopy) 1、DOS命令: xcopy /r /y $(TargetPath) $(SolutionDir)\map\Bin\ 2、操作方法: 右鍵項目-屬性-生成事件。在生成后事件命令行輸入以上代碼,如下圖所示: 3、其中的各個參數(shù)的意義如下圖所示: 4、解釋如下: $(TargetPath)和$(SolutionDir)是兩個宏,分別代表程序集編譯后生成的dll文件和解決方案的路徑 。 即每次生成成功后,都會將\bin\Debug\目錄里面的Mysoft.Selonsy.Services.dll文件拷貝到?解決方案路徑\map\Bin\ 目錄下面,并覆蓋原有文件,且不給出覆蓋提示。 ? 回到頂部 ?DS04、第二種實現(xiàn)方法(attrib) ?1、操作方法: 我們也可以直接在生成里面配置輸出路徑,如下圖所示: 右鍵項目-屬性-生成-輸出路徑,更改為要拷貝到的目的文件夾。如:..\map\Bin\?(即:上級目錄的map\Bin\文件夾)。 注意:此時?map\Bin\ 文件夾下面就會有兩個文件,一個.dll和一個.pdb文件。 2、當然僅僅是這樣是不夠的,因為上面的事件動作是先檢查目的文件夾里面的內容,如果已經(jīng)存在同名文件的話,將其刪除,再把obj/Debug里面生成的dll拷貝到該文件夾里面。 那么這樣就會出現(xiàn)異常,因為很多的項目都會設置部分重要文件夾為只讀(比如說上面的 \Map\bin\ ),所以正常執(zhí)行刪除的時候會提示操作失敗,如下圖所示: 去只讀的原因:拷貝dll文件需要將以前的老的先刪除掉,再將新生成的dll文件拷貝過去,如果原dll文件只讀,那么就會刪除失敗,拷貝也就失敗了。 注意:從上面錯誤提示的第三句話可以看出,他是將obj/Debug下面的dll復制過去的。 當然,那些不設置為只讀的項目文件夾及文件就沒有這個問題了, 下面僅對設置了只讀屬性的情況進行討論。 3、編寫預先生成事件命令行,對目標文件夾里面的已存在的dll文件和pdb文件進行去只讀操作。 首先我們在解決方案文件夾下面新建一個BeforeBuild.bat批處理文件,其內容如下: 功能:去除指定目錄里面后綴為.dll和.pdb文件的只讀屬性。 放置的路徑如下: 4、在預先生成事件命令行里面調用此批處理文件 命令為:call $(SolutionDir)BeforeBuild.bat 解釋:調用并執(zhí)行解決方案路徑下面的BeforeBuild.bat 文件,這樣在生成事件之前會先將目標文件夾里面的.dll文件和.pdb文件去只讀, 然后在執(zhí)行刪除復制操作,這樣就不會報錯了。 回到頂部DS05:分享一個有意思的東西
1、背景:
如果你的開發(fā)任務中存在多個項目(這里指的是很多很多哦),那么每次編譯的時候就會花很長的時間,
如果可以讓編譯結束之后給出彈窗提示,那么我們就可以在等待的這段時間里做點其他有意思的事情了,有沒有很心動啊?
2、操作方法:
我們在最后一個項目的后期生成事件命令中調用以下的批處理文件:
命令:call?$(SolutionDir)AfterBuild.bat
3、解釋如下:
輸出一段話 msgbox "項目已全部編譯完成!" ?到myTip.vbs文件中去(注意:沒有的話會新建一個)。
然后執(zhí)行這個新生成的vbs(visual basic script)文件,彈出提示框。
最后再刪除此文件。
那么,當最后一個項目編譯完成之后,就會彈出如下的彈窗提示我們繼續(xù)coding了。
有沒有很贊啊,其實有時候中間等待的時間都夠我玩一把俄羅斯方塊了,說多了都是淚。。。
回到頂部
DS06、需要了解的其他知識 1、編譯的步驟簡介: 》新建一個項目的話,bin文件夾里面是空的,obj/Debug文件夾里面的TempPE里面也是空的,但是obj/Debug本身不是空的。 》當點擊生成項目的時候,bin文件夾中出現(xiàn)了兩個文件,一個.dll文件和一個同名的.pdb文件。 ? ?obj/Debug文件夾里面也有一個.dll文件和一個同名的.pdb文件,與bin文件相同。 ? ?但是另外還有一個.csprojResolveAssemblyReference.cache文件。 PS:所有編譯才新生成的文件,都在.csproj.FileListAbsolute.txt文件里面有提示。 2、運行后期生成事件: ? 3、vs編譯過程中常見的宏: 可以使用以下任意宏來指定文件位置,或在存在多重選擇的情況下獲取輸入文件的實際名稱,這些宏不區(qū)分大小寫。| $(ConfigurationName) | 當前項目配置的名稱(例如,“Debug|Any CPU”)。 |
| $(OutDir) | 輸出文件目錄的路徑,相對于項目目錄。這解析為“輸出目錄”屬性的值。它包括尾部的反斜杠“\”。 |
| $(DevEnvDir) | Visual Studio 2005 的安裝目錄(定義為驅動器 + 路徑);包括尾部的反斜杠“\”。 |
| $(PlatformName) | 當前目標平臺的名稱。例如“AnyCPU”。 |
| $(ProjectDir) | 項目的目錄(定義為驅動器 + 路徑);包括尾部的反斜杠“\”。 |
| $(ProjectPath) | 項目的絕對路徑名(定義為驅動器 + 路徑 + 基本名稱 + 文件擴展名)。 |
| $(ProjectName) | 項目的基本名稱。 |
| $(ProjectFileName) | 項目的文件名(定義為基本名稱 + 文件擴展名)。 |
| $(ProjectExt) | 項目的文件擴展名。它在文件擴展名的前面包括“.”。 |
| $(SolutionDir) | 解決方案的目錄(定義為驅動器 + 路徑);包括尾部的反斜杠“\”。 |
| $(SolutionPath) | 解決方案的絕對路徑名(定義為驅動器 + 路徑 + 基本名稱 + 文件擴展名)。 |
| $(SolutionName) | 解決方案的基本名稱。 |
| $(SolutionFileName) | 解決方案的文件名(定義為基本名稱 + 文件擴展名)。 |
| $(SolutionExt) | 解決方案的文件擴展名。它在文件擴展名的前面包括“.”。 |
| $(TargetDir) | 生成的主輸出文件的目錄(定義為驅動器 + 路徑)。它包括尾部的反斜杠“\”。 |
| $(TargetPath) | 生成的主輸出文件的絕對路徑名(定義為驅動器 + 路徑 + 基本名稱 + 文件擴展名)。 |
| $(TargetName) | 生成的主輸出文件的基本名稱。 |
| $(TargetFileName) | 生成的主輸出文件的文件名(定義為基本名稱 + 文件擴展名)。 |
| $(TargetExt) | 生成的主輸出文件的文件擴展名。它在文件擴展名的前面包括“.”。 ? |
?
轉載于:https://www.cnblogs.com/selonsy/p/dll-build.html
總結
以上是生活随笔為你收集整理的多项目开发下的dll文件管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQLyog v12.09 (64 bi
- 下一篇: oracle的工具cmd,数据库命令行工