多項目開發下的dll文件管理

閱讀目錄:
  • DS01:為什么要對生成的dll文件進行管理?
  • DS02:首先介紹以下兩個DOS命令
  • DS03:第一種實現方法(xcopy)
  • DS04:第二種實現方法(attrib)
  • DS05:分享一個有意思的東西
  • DS06:您可能需要了解的其他知識
DS01、為什么要對生成的dll文件進行管理?

有時候,我們需要將編譯后的文件和dll拷貝到一個集中的地方,這一點對于多項目開發來講很有幫助。

回到頂部

DS02、首先介紹以下兩個DOS命令:
》attrib
attrib指令的格式和常用參數為
ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [[drive:] [path] filename] [/S [/D]]
+ 設置屬性。
- 清除屬性。
R 只讀文件屬性。
A 存檔文件屬性。
S 系統文件屬性。
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           創建每個目標文件之前提示您。/S           復制目錄和子目錄,不包括空目錄。/E           復制目錄和子目錄,包括空目錄。與 /S /E 相同。可以用來修改 /T。/V           驗證每個新文件的大小。/W           提示您在復制前按鍵。/C           即使有錯誤,也繼續復制。/I           如果目標不存在,且要復制多個文件,則假定目標必須是目錄。/Q           復制時不顯示文件名。/F           復制時顯示完整的源文件名和目標文件名。/L           顯示要復制的文件。/G           允許將加密文件復制到不支持加密的目標。/H           也復制隱藏文件和系統文件。/R           覆蓋只讀文件。/T           創建目錄結構,但不復制文件。不包括空目錄或子目錄。/T /E 包括空目錄和子目錄。/U           只復制已經存在于目標中的文件。/K           復制屬性。一般的 Xcopy 會重設只讀屬性。/N           用生成的短名稱復制。/O           復制文件所有權和 ACL 信息。/X           復制文件審核設置(隱含 /O)。/Y           取消提示以確認要覆蓋現有目標文件。/-Y          要提示以確認要覆蓋現有目標文件。/Z           在可重新啟動模式下復制網絡文件。/B           復制符號鏈接本身與鏈接目標相對。/J           復制時不使用緩沖的 I/O。推薦復制大文件時使用。開關 /Y 可以預先在 COPYCMD 環境變量中設置。
這可能被命令行上的 /-Y 覆蓋。
xcopy命令的幫助文檔

基本功能:復制文件和目錄樹。

常用用法:xcopy -r -y 原始文件夾\文件名 目標文件夾

舉例說明:
xcopy -r -y test.txt ..\map\bin\
此命令可以將當前文件夾下面的test.txt文件復制到父級目錄下面的map\bin\文件夾下面,如果有同名文件直接覆蓋,并且不給出覆蓋提示。
回到頂部
?
DS03、第一種實現方法(xcopy)
1、DOS命令:
xcopy /r /y $(TargetPath) $(SolutionDir)\map\Bin\
2、操作方法:
右鍵項目-屬性-生成事件。在生成后事件命令行輸入以上代碼,如下圖所示:
3、其中的各個參數的意義如下圖所示:
4、解釋如下:
$(TargetPath)$(SolutionDir)是兩個宏,分別代表程序集編譯后生成的dll文件解決方案的路徑
即每次生成成功后,都會將\bin\Debug\目錄里面的Mysoft.Selonsy.Services.dll文件拷貝到?解決方案路徑\map\Bin\ 目錄下面,并覆蓋原有文件,且不給出覆蓋提示。
?
回到頂部
?DS04、第二種實現方法(attrib)
?1、操作方法:
我們也可以直接在生成里面配置輸出路徑,如下圖所示:
右鍵項目-屬性-生成-輸出路徑,更改為要拷貝到的目的文件夾。如:..\map\Bin\?(即:上級目錄的map\Bin\文件夾)。
注意:此時?map\Bin\ 文件夾下面就會有兩個文件,一個.dll和一個.pdb文件。
2、當然僅僅是這樣是不夠的,因為上面的事件動作是先檢查目的文件夾里面的內容,如果已經存在同名文件的話,將其刪除,再把obj/Debug里面生成的dll拷貝到該文件夾里面
那么這樣就會出現異常,因為很多的項目都會設置部分重要文件夾為只讀(比如說上面的 \Map\bin\ ),所以正常執行刪除的時候會提示操作失敗,如下圖所示:
去只讀的原因:拷貝dll文件需要將以前的老的先刪除掉,再將新生成的dll文件拷貝過去,如果原dll文件只讀,那么就會刪除失敗,拷貝也就失敗了。
注意:從上面錯誤提示的第三句話可以看出,他是將obj/Debug下面的dll復制過去的。
當然,那些不設置為只讀的項目文件夾及文件就沒有這個問題了,
下面僅對設置了只讀屬性的情況進行討論。
3、編寫預先生成事件命令行,對目標文件夾里面的已存在的dll文件和pdb文件進行去只讀操作。
首先我們在解決方案文件夾下面新建一個BeforeBuild.bat批處理文件,其內容如下:
功能:去除指定目錄里面后綴為.dll和.pdb文件的只讀屬性。
放置的路徑如下:
4、在預先生成事件命令行里面調用此批處理文件
命令為:call $(SolutionDir)BeforeBuild.bat
解釋:調用并執行解決方案路徑下面的BeforeBuild.bat 文件,這樣在生成事件之前會先將目標文件夾里面的.dll文件和.pdb文件去只讀,
然后在執行刪除復制操作,這樣就不會報錯了。
回到頂部

DS05:分享一個有意思的東西

1、背景

如果你的開發任務中存在多個項目(這里指的是很多很多哦),那么每次編譯的時候就會花很長的時間,

如果可以讓編譯結束之后給出彈窗提示,那么我們就可以在等待的這段時間里做點其他有意思的事情了,有沒有很心動啊?

2、操作方法

我們在最后一個項目后期生成事件命令中調用以下的批處理文件:

命令:call?$(SolutionDir)AfterBuild.bat

3、解釋如下

輸出一段話 msgbox "項目已全部編譯完成!" ?到myTip.vbs文件中去(注意:沒有的話會新建一個)。

然后執行這個新生成的vbs(visual basic script)文件,彈出提示框。

最后再刪除此文件。

那么,當最后一個項目編譯完成之后,就會彈出如下的彈窗提示我們繼續coding了。

有沒有很贊啊,其實有時候中間等待的時間都夠我玩一把俄羅斯方塊了,說多了都是淚。。。

回到頂部

DS06、需要了解的其他知識
1、編譯的步驟簡介
》新建一個項目的話,bin文件夾里面是空的,obj/Debug文件夾里面的TempPE里面也是空的,但是obj/Debug本身不是空的。
》當點擊生成項目的時候,bin文件夾中出現了兩個文件,一個.dll文件和一個同名的.pdb文件。
? ?obj/Debug文件夾里面也有一個.dll文件和一個同名的.pdb文件,與bin文件相同。
? ?但是另外還有一個.csprojResolveAssemblyReference.cache文件。
PS:所有編譯才新生成的文件,都在.csproj.FileListAbsolute.txt文件里面有提示。
2、運行后期生成事件
?
3、vs編譯過程中常見的宏
可以使用以下任意宏來指定文件位置,或在存在多重選擇的情況下獲取輸入文件的實際名稱,這些宏不區分大小寫
說明

$(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)

生成的主輸出文件的文件擴展名。它在文件擴展名的前面包括“.”。

?

?
回到頂部
2015年1月4日16:45:51
?
?
?
?
?
?
?

?

轉載于:https://www.cnblogs.com/selonsy/p/dll-build.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273467.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273467.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273467.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于Java中的隨機數產生

對比兩種寫法&#xff1a; 第一種&#xff1a; public static void main(String args[]){Random random new Random(System.currentTimeMillis());for(int i0; i<20; i){int sindex random.nextInt(2);System.out.println(sindex);}}第二種&#xff1a; public static voi…

視圖

視圖是虛表&#xff0c;是從一個或幾個基本表&#xff08;或視圖&#xff09;中導出的表&#xff0c;在系統的數據字典中僅存放了視圖的定義&#xff0c;不存放視圖對應的數據。視圖是原始數據庫數據的一種變換&#xff0c;是查看表中數據的另外一種方式。可以將視圖看成是一個…

選擇器的并發性

4.3.4 并發性 選擇器對象是線程安全的&#xff0c;但它們包含的鍵集合不是。通過keys( )和selectKeys( )返回的鍵的集合是Selector對象內部的私有的Set對象集合的直接引用。這些集合可能在任意時間被改變。已注冊的鍵的集合是只讀的。如果您試圖修改它&#xff0c;那么您得到的…

mysql 自定義函數之判斷

DELIMITER $$CREATE DEFINERrootlocalhost FUNCTION getMin(a int,b int) RETURNS int(11)BEGINdeclare min int;if(a>b)then set min b;elseif(b>a)then set min a;else set min 0;#end if;end if;RETURN min;END 調用該函數可以如下方式 select getMin(1,2); 返回值…

C/C++的數組名

數組名相當于指向數組第一個元素的地址。數組名不是變量&#xff0c;是地址常量&#xff0c;不能為其賦值。如下&#xff1a;1&#xff09;一維數組中對于數組 a[5] {1, 2, 3, 4, 5};數組名a相當于指向第一個元素a[0]的指針。即 a 與 &a[0] 等價。2&#xff09;二維數組中…

mysql的運算法

一、算術運算符1、加 www.2cto.com mysql> select 12;-----| 12 |-----| 3 |-----2、減mysql> select 1-2;-----| 1-2 |-----| -1 |-----3、乘mysql> select 2*3;-----| 2*3 |-----| 6 |-----4、除mysql> select 2/3;--------| 2/3 |--------| 0.6667 |-…

轉-- iOS 30多個iOS常用動畫,帶詳細注釋

// // CoreAnimationEffect.h // CoreAnimationEffect // // Created by VincentXue on 13-1-19. // Copyright (c) 2013年 VincentXue. All rights reserved. //#import <Foundation/Foundation.h>/**! 導入QuartzCore.framework** Example:** Step.1** #imp…

Java中abstract與interface

抽象類&#xff08;abstract class&#xff09;的特點&#xff1a; 1.抽象類、抽象方法都必須使用abstract修飾。 2.抽象類中&#xff0c;可以有非抽象方法&#xff0c;甚至可以是沒有任何方法或變量的空類。 對于抽象類中不定義抽象方法的用意在于&#xff1a;使該類不能被創建…

按位與、或、異或等運算方法

按位與運算符&#xff08;&&#xff09; 參加運算的兩個數據&#xff0c;按二進制位進行“與”運算。 運算規則&#xff1a;0&00; 0&10; 1&00; 1&11; 即&#xff1a;兩位同時為“1”&#xff0c;結果才為“1”&#xff0c;否則為0 例如&#xff1…

JavaScript驗證

<script type"text/javascript"> /*密碼*/ function password() { var password document.getElementById("password").value; var ts document.getElementById("tsPassword"); if (password.length >…

mysql數據庫根據上傳的經緯度計算距離

select 6371.393*ACOS(COS(RADIANS(latitude))*COS(RADIANS(47.02))*COS(RADIANS(longitude)-RADIANS(114.100))SIN(RADIANS(latitude))*SIN(RADIANS(47.02))) as distancefrom location

emacs配置

; 指針顏色設置為白色(set-cursor-color "white");; 鼠標顏色設置為白色(set-mouse-color "white") ;; 從color-theme中獲取;; 網上下載color-theme.el&#xff0c;放到加載路徑(&#xff0f;usr/share/emacs/site-lisp )下;; M-x color-theme-select,鼠標…

自然連接(NATURAL JOIN)

自然連接&#xff08;NATURAL JOIN&#xff09;是一種特殊的等價連接&#xff0c;它將表中具有相同名稱的列自動進行記錄匹配。自然連接不必指定任何同等連接條件。圖9.9給出了典型的自然連接示意圖。 圖9.9 自然連接 自然連接自動判斷相同名稱的列&#xff0c;而后形成匹配。…

iis express8 自動關閉

引用&#xff1a;http://www.cnblogs.com/chunCui/p/3522619.html 問題&#xff1a;最近使用vs2013開發個web &#xff0c; 每次調試結束時iis express 8 也會自動關閉 解決方法&#xff1a;web項目-屬性-web-調試器-只選中ASP.Net就可以了 轉載于:https://www.cnblogs.com/qqq…

自連接

9.3 表的連接類型 9.3.1 自連接 自連接是指表與其自身進行連接&#xff0c;這就需要用到前面介紹的表別名。下面通過一個具體實例來講解自連接的應用。 實例5 自連接的使用方法 查詢成績中存在不及格課程的學生的姓名、所在系、所有的課程及成績信息。如果采用前面介紹的…

從此記錄

從此記錄工作、學習、生活的那些事兒&#xff01;轉載于:https://www.cnblogs.com/alwaysjava/p/4221362.html

LIKE運算符

6.5 使用LIKE進行模糊查詢 當只知道部分字符串時&#xff0c;可使用LIKE運算符來查詢數據庫&#xff0c;找出與其相關的整個字符串。因此&#xff0c;當把關鍵字LIKE用在WHERE子句中時&#xff0c;可以比較兩個字符串的部分匹配。當對字符串內容有些印象&#xff0c;但并不知…

AND運算符

6.2 組合查詢條件 在前一章提到的WHERE子句進行查詢時&#xff0c;WHERE子句后面的搜索條件只是單一的。實際上&#xff0c;可以通過布爾運算符AND和OR&#xff0c;將多個單獨的搜索條件結合在一個WHERE子句中&#xff0c;形成一個復合的搜索條件。當對復合搜索條件求值時&a…

Cron表達式【一】

Cron表達式【一】 Cron表達式被用來配置CronTrigger實例。 Cron表達式是一個由 7個子表達式組成的字符串。每個子表達式都描述了一個單獨的日程細節。這些子表達式用空格分隔&#xff0c;分別表示&#xff1a; 1. Seconds 秒 2. Minutes 分鐘 3. Hours 小時 4. Day-of-Month 月…

OR運算符

6.2.2 OR運算符 OR運算符表示“或”的關系。當可能有多個條件為True&#xff0c;但只要有一個為True就滿足搜索要求時&#xff0c;可以使用OR運算符來組合搜索條件。OR在結合兩個布爾表達式時&#xff0c;只要其中一個條件為True時&#xff0c;便傳回True。OR運算符的真值表…