解決使用MSBuild編譯專案沒有拷貝間接引用的dll問題
Description:使用命令列編譯專案時,只會拷貝直接引用的二進位制dll到專案輸出資料夾,不會拷貝間接引用的。例如同一解決方案下有A,B兩個專案,A專案引用log4net,B專案引用A專案。使用VS編譯時會把log4net.dll拷貝到B專案的bin目錄,但是簡單的使用MSBuild b.csproj /p:Configuration:Release並不會拷貝log4net.
Analysis:從最表面入手,沒有拷貝就讓他拷貝。檢視MSDN,得知有Copy task可以用,實際上msbuild所有的步驟都定義在csproj檔案和MSBuild .Targets 檔案裡邊了。找到最簡單暴力的方法,拷貝。
1.先確定從哪裡拷貝什麼,很顯然我們需要的是A專案bin/(debug|release)目錄下的dll檔案,有個疑問,這個dll版本會是最新的嗎?答:一定是,因為使用MSBuild編譯時所有間接引用的專案都會根據指令重新生成。
直接在當前夏木的csproj檔案的Project配置節下邊新增一個<ItemGroup>配置節,設定我們需要查詢的檔案。$(Configuration)是指當前編譯時使用/p傳進來的引數,msbuild會自動替換掉,如使用MSBuild b.csproj /p:Configuration:Release並就會替換成Release。
2.什麼時候如何拷貝。這個也很簡單。在csproj檔案末尾新增Name屬性為AfterBuild的Target 配置節。因為這個專案時webApplication專案,所以直接拷貝到bin目錄即可。
<Target
Name= "AfterBuild" >
<Copy
SourceFiles= "@(Dlls)"
DestinationFolder="bin\"/>
</Target>
</Project>
|
思考:
這個方法方便可靠嗎?
肯定不方便,建立每個可執行專案(exe,webApplication)都需要修改一下配置檔案。此方法還沒有在website上驗證。
也不太可靠,如果出現下邊的情況會是怎樣呢?
這種複製具有不確定性,即大家都不確定最終是哪個版本覆蓋哪個版本。實際上這個在我之前寫程式碼的時候就發現了,一直不知道如何處理,兩個版本改動不大還好說,如果改動大了呢?我當時的做法是使用
不可靠你還拿出來?
完全是記錄自己解決問題的思路。其實這種思路並不正確,我總是喜歡做一些模稜兩可的事情,表面上看似解決問題了,實際則不然,一直再改進,但起色不大,求指點。
這個是最優方法嗎?
不是,如果你開啟MSBuild .Targets 檔案就發現有很多流程和這個問題相關,很多地方都能解決這個問題,DUDU老大找到一篇資料《resolving binary references in msbuild》就提出了至少2種方法,顯示一個簡單暴力的方法,接著給出了一個比較perfect的解決方案。
參考:
相關推薦
解決使用MSBuild編譯專案沒有拷貝間接引用的dll問題
Description:使用命令列編譯專案時,只會拷貝直接引用的二進位制dll到專案輸出資料夾,不會拷貝間接引用的。例如同一解決方案下有A,B兩個專案,A專案引用log4net,B專案引用A專案。使用VS編譯時會把log4net.dll拷貝到B專案的bin目錄,但是簡單的使用MSBuild b.csproj
程式碼修改之後MSbuild編譯不出最新的dll解決方法
問題: 使用jenkins釋出的時候,開發不斷反饋自己修改的檔案使用jenkins沒有釋出到測試環境。經過查證發現使用MSBUILD編譯的時出現修改的檔案編譯出的日期不是最新日期,但是使用VS編譯就不會出現此問題。 解決方案: 在Project裡面新增元素:新增InitialTarget
解決maven非resources資料夾下的配置檔案編譯時不拷貝問題
用hibernate反向生成實體類時,報錯:org.hibernate.MappingNotFoundException: resource:**.hbm.xml not found 原因: maven web工程中,編譯時預設只將resources下的資原始檔拷貝到ta
專案maven依賴成功,但編譯一直報錯:引用專案的類路徑找不到
使用IDE:Intellij Idea 框架:spring-boot 專案結構:兩個子專案之間的引用,A和B均為C專案的子專案,A需要依賴B。問題探索的過程(浪費了a lot of time,時間就是金錢啊,心疼~~~,希望看到這篇文章的小夥伴少走彎路 ) 1.A專案在依
VS編譯間接引用的DLL不一定輸出
如果A引用B,B引用C,那麼A對C就是間接引用,一般的編譯A時會輸出B的DLL,而因為B對C有引用,所以也會輸出C的DLL。但是實際編譯時發現,並不一定都會輸出C的DLL。後面不斷的追查原因,最終發現是與B對C引用時程式碼的呼叫有關。如果B對C的呼叫都是常量的方式,比如C中都
記錄解決 Spring Boot 專案繼承依賴導致編譯失敗問題
問題背景,公司一個使用 Spring Boot 的 Mutil 專案,根據 Spring Boot 官方文件配置好 Parent 繼承 spring-boot-starter-parent POM 的時候可以正常編譯執行,但是正式上線時,需要切換到繼承公司
Maven編譯找不到外部引用包的解決
錯誤出現場景有些jar包是通過maven依賴引入,但有些包是自己的或者maven倉庫找不到這樣的jar,就通過buildpath加入到專案中,但是maven編譯的時候,找不到這些包,導致編譯失敗,如圖:解決外部包在如圖位置:那麼解決方式就是在編譯時指定這些外部包的位置pom.
解決在Eclipse新建web專案沒有自動生成web.xml和在新建servlet的時候自動生成web.xml配置
一、在Eclipse新建web專案沒有自動生成web.xml解決辦法 方法一:在Eclipse新建web專案的時候重要引數上打勾 1、file–new-Dynamic Web Project 2、next下一步 3、next下一步 4、關鍵:這裡一定要打勾,預設是沒
vs2010和VS2012中,新建專案沒有看到解決方案(已解決)
不知怎麼弄的,突然新建專案沒有了解決方案,想重灌太浪費時間了,網上查也沒有找到問這個問題的人,後來一想,是不是前幾天初始vs時把引數給初始了,於是,在【工具】-【選項】-【專案和解決方案】,把右邊的對勾都選上,懶得試哪
AndroidStudio升級後編譯專案出現Aapt2Exception異常的問題解決方案
問題描述AndroidStudio升級後,開啟舊專案沒問題,但是新建專案編譯會報錯:Errorcom.android.tools.aapt2.Aapt2Exception AAPT2 error che
Maven專案沒有Project Facets的解決方法
經常在eclipse中匯入web專案時,出現轉不了專案型別的問題,匯入後就 是一個java專案,有過很多次經歷,今天也有同事遇到類似問題,就把這個解決方法記下來吧,免得以後再到處去搜索。 解決步驟: 1、進入專案目錄,可看到.project檔案,開啟。 2、找到&l
eclipse無法build project 編譯專案或者類的解決方法
1. 點選選單上的project,先clean 2. 刪除build path裡所有引用的lib,然後重新匯入。3. 右鍵點選專案,build project 我的問題就是這樣解決。 傳說的其它方法,我沒試驗成功,如下:
delphi 10.1編譯專案的時候出現MSBuildToolsPath is not specified for the ToolsVersion解決辦法
今天在使用delphi 10.1編譯專案的時候出現MSBuildToolsPath is not specified for the ToolsVersion "14.0" defined at
springboot專案上有個紅叉,且ecplise沒有自動編譯專案,執行提示“錯誤: 找不到或無法載入主類”
近期在做springboot專案,發現springboot專案上有個紅叉但找不到哪個類報錯,ecplise沒有把專案自動編譯,執行還提示“錯誤: 找不到或無法載入主類”,進入工作空間“專案\target\classes”,發現專案java類根本沒有編譯,嘗試各種方式發現均
web專案釋出到tomcat中編譯後沒有classes檔案的原因
通常專案編譯釋出到tomcat中後會在WEB-INF下生成classes檔案,這裡麵包含的是編譯後的Java原始碼檔案!那麼在什麼情況下編譯後classes檔案沒有出現在WEB-INF下呢? 在工作空間中每個專案裡都有一個.settings檔案,這個檔案下包含的是專案釋出編
使用Ant編譯專案,舊版SDK用apkbuilder打包,新版SDK沒有apkbuilder工具,用sdklib.jar打包apk
1、舊版SDK目錄,使用apkbuilder工具打包apk 如果你的SDK目錄是舊的,還有apkbuilder.exe工具的話,打包成apk的配置豐富如下: <!-- 打包成未簽名的apk,使用apkbuilder命令組合classes.dex,res.zip和
解決ADT Eclipse專案的Preference中,Java Compiler下沒有Annotation Processing
很多做安卓開發的跟我一樣,用的IDE可能都是從谷歌安卓官網上下載的ADT Bundle的Eclipse吧,確實這樣很方便,解壓出來就直接能用。但是前段時間遇到一個問題,本來打算用一下ButterKnife這個注入框架,但不光是把jar包扔進專案libs資料夾中就完了,還要求在專案右鍵的preference裡
【加快cocos2d-x編譯速度】cocos2d-x編譯專案時避免拷貝資料夾和庫
http://codingnow.cn/cocos2d-x/928.html 本文參考自子龍山人的部落格,跟他的方法也有少許的不同,自己用著舒心才是最重要的。cocos2d-x的版本更新太快了,本文使用的是最新的cocos2d-x 2.0.4版本,IDE是vs2010
個人解決的一個IDEA專案中不能引用pom檔案中新增的依賴問題
在某一次的開發過程中,發現在pom檔案中已經新增好了依賴以及版本號等,可是程式碼中並不能引用這些依賴。最終還是找到了解決辦法:在IDEA中找到MAVEN外掛(file->setting->搜尋框中輸入mave
Eclipse中的Android專案編譯後沒有生成R檔案的兩種原因
筆者在用Eclipse寫Android專案,時常發生R檔案錯誤。 對此筆者總結了兩種原因:一種是res目錄下的檔案有Eclipse檢查不出的錯誤,但不能通過編譯,因此沒有生成R檔案。還有一種情況是已經