msbuild編譯
Ⅰ msbuild是干什麼的我系統裡面沒有,哪裡能下載
類似make的東西,不過可以直接從項目解決方案來編譯。
在開始——所有程序——Microsoft Visual Studio 2012——Visual Studio Tools——VS2012 開發人員命令提示
然後在彈出來的黑窗口裡面運行這個開源庫的編譯腳本
Ⅱ MSBuild是什麼文件有什麼用能不能刪除掉啊
可以刪除,因為MSBuild不是系統文件。
MSBuild 是 Microsoft 和 Visual Studio的生成系統,它不僅僅是一個構造工具,應該稱之為擁有相當強大擴展能力的自動化平台,MSBuild平台的主要涉及到三部分:執行引擎、構造工程、任務。普通用戶用不到是可以刪除的。
(2)msbuild編譯擴展閱讀:
MSBuild 引入了一種新的基於 XML 的項目文件格式,這種格式容易理解、易於擴展並且完全受 Microsoft 支持。
MSBuild 項目文件的格式使開發人員能夠充分描述哪些項需要生成,以及如何利用不同的平台和配置生成這些項。
另外,項目文件的格式還使開發人員能夠創作可重用的生成規則,這些規則可以分解到不同的文件中,以便可以在產品內的不同項目之間一致地執行生成。以下各節描述了 MSBuild 項目文件格式的一些基本要素。
MSBuild 編譯後生成的是.exe 可執行文件,但卻不能生成.msi 安裝包文件。如果想要使用MSBuild 生成安裝包文件,還需要藉助WiX編輯一個wxs類型的工程。
Ⅲ 使用MSBuild編譯與使用VS編譯有什麼不同嗎
MSBuild簡介
Visual Studio的編譯引擎是 MSBuild ,它提供了一套項目文件( .csproj , .vbproj , vcxproj )的XML的Schema,用來指定如何處理和編譯項目。
當然MSBuild不依賴於Visual Studio,完全可以在不安裝Visual Studio的情況下使用MSBuild。比如可以從 Microsoft Build Tools 2015 下載MSBuild來編譯C#。2016年3月31號微軟也宣布了 Visual C++ Build Tools 2015 ,可以 下載 來編譯VC++的項目。
MSBuild也是一個MIT License的開源軟體,可以在Github上看到它的 倉庫 。
MSBuild Toolset (ToolsVersion) 是一個任務、目標和工具的集合,指定MSBuild的行為。通常一個MSBuild的Toolset包含 microsoft.common.tasks 文件, microsoft.common.targets 文件和編譯器比如 csc.exe , cl.exe 和 link.exe 。
Ⅳ 如何使用C++Builder編譯Delphi使用Obj文件
一直以來,Delphi 都可以用命令行 dcc32 ProjectName.dpr 對項目進行編譯鏈接,非常方便,Delphi對項目文件的參數配置處理的很簡單,便於閱讀處理起來也很直觀,編譯的中間文件也很簡單(dcu,dcp)。
而C++Builder就沒那麼幸運了,因為包含了C++的特徵,各種編譯的中間文件:lib,obj,res,map,tds。後來新版又增加了一些預編譯文件:ilc,ild,ilf,...,pch,#00,...等等等等,各種搜索路徑(Include Path,Library Path,Browse Path...),要是用bcc32及ilink32手工進行編譯鏈接,命令的參數都足夠寫上大半天。幸好,在舊版C++Builder中,如果要用命令行編譯BCB項目,只要將bpr文件轉換為mak文件,再使用make命令進行編譯鏈接也比較方便,不需要過多的處理:
[plain] view plainprint?
bpr2mak -oProject1.mak Project1.bpr
make -fProject1.mak
自從Delphi/C++Builder開始使用 MSBuild* 編譯系統後(好像是RAD Studio 2006開始,具體忘記了),Delphi項目在保存為dpr的同時,也會保存一份dproj的項目文件,dpr依舊沿用舊格式,dproj 則以MSBuild規范以XML格式保存,除了可以用舊方式命令行編譯dpr外,也可以用:
[plain] view plainprint?
msbuild.exe /t:Rebuild /p:Config=Debug ProjectName.dproj
進行編譯,但msbuild必須設定一些環境變數,RAD Studio自帶了一個命令行工具已經做好了這些,其實就是設定了以下幾個環境變數($(BDS)\bin\rsvars.bat):
[plain] view plainprint?
@SET BDS=C:\Embarcadero\RAD Studio\7.0
@SET BDSCOMMONDIR=C:\Users\Public\Documents\RAD Studio\7.0
@SET FrameworkDir=C:\Windows\Microsoft.NET\Framework\v2.0.50727
@SET FrameworkVersion=v2.0.50727
@SET FrameworkSDKDir=
@SET PATH=%FrameworkDir%;%FrameworkSDKDir%;%PATH%
@SET LANGDIR=EN
C++Builder則又更杯具了一些,bpr2mak.exe工具已經沒有了,所以只能採用MSBuild進行命令行編譯。更加杯具的是,隨著Delphi和BCB被多次轉賣收購,新版本的發布似乎總會有各種各樣的Bug,比如手頭的RAD Studio 2009進行命令行編譯,Delphi正常,BCB則報出超過100個錯誤,類似如下:
[plain] view plainprint?
C:\Embarcadero\RAD Studio\7.0\Bin\CodeGear.Cpp.Targets(2175,3): error : Error: Unresolved external '__fastcall Strhlpr::UnicodeFree(System::UnicodeString&)' referenced from C:\EMBARCADERO\RAD STUDIO\7.0\LIB\DEBUG\VCLE.LIB|ustring
C:\Embarcadero\RAD Studio\7.0\Bin\CodeGear.Cpp.Targets(2175,3): error : Error: Unresolved external 'Typinfo::BooleanIdents' referenced from C:\EMBARCADERO\RAD STUDIO\7.0\LIB\DEBUG\VCLE.LIB|vclinit
檢查了一下發現編譯過程(bcc32.exe)沒有問題,只是在ilink32.exe鏈接過程中報錯,在IDE中打開此項目進行編譯,查看Message->Output窗口,比較兩者的ilink32命令行參數,發現兩者有兩個地方有明顯差異,一個是IDE生成的命令中沒有類似 C:\Embarcadero\RAD Studio\7.0\lib\EN\debug 的路徑(指的是EN這個目錄,去除上面rsvars.bat中的@SET LANGDIR=EN 就可以避免產生這樣的搜索路徑) ,但是雖然這個目錄不存在,也應該不至於導致出錯。第二個差異是缺少了rtl.bpi和vcl.bpi的附加obj參數,解決辦法是在$(BDS)\bin目錄中找到 CodeGear.Cpp.Targets 文件,用記事本打開,搜索字元「memmgr.lib「,在前面加上"rtl.bpi;vcl.bpi" (用;分隔,不含引號),一共有兩處要修改。或者查找 "c0w32",在後面加上 "rtl.bpi;vcl.bpi",只有一處修改 —— 因為IDE的命令行中 rtl.bpi vcl.bpi是在c0w32和memmgr.lib中間的。—— (注意:在XE2中,加在c0w32後面已經不管用了,編譯會報另一個錯誤VCL.BPIW.OBJ不存在,Targets文件有很大變化,可能參數的位置變動過了,導致與其他參數混在一起,所以還是加到memmgr.lib處更加合理)。
一些組件包比如DevExpress的Package,沒有dproj或者cproj 項目文件,只能通過IDE進行轉換,但坑爹的是bpk在好幾個版本以前(CRS 2007?)已經不支持bpk項目,根本打不開也談不上轉換了,但它其實是一個make文件,可惜用make命令編譯還是要出錯,不想去研究了。總之,BCB永遠活在Delphi的陰影下。
Ⅳ VS2005 debug編譯和msbuild編譯 有什麼區別
用aspnet_compiler發布網站在asp.net 2.0模型中,vs2005已經完全脫離了編譯而成為了一個徹底的ide.算是一個不小的改動。其中更是取消了有關Web Application的概念,使得習慣了vs2003的人剛開始的時候會有一些摸不著頭腦。下面簡單說一下我在使用過程中自己總結的,算是一點經驗。
新建web工程並且位置是文件系統的時候,vs2005隻是幫你建好了一個sln文件,這個東西只是指引msbuild 如何進行編譯的,過程是:ide 調用 msbuild ,msbuild解析sln文件,msbuild調用aspnet_compiler.exe進行網站的編譯。所以aspnet_compiler.exe只是負責進行網站的編譯的。
預編譯的概念在 .netframework 1.1 裡面就存在了,vs2003中的預編譯指的是將頁面對應的cs/vb文件與resx文件編譯後統一集成到一個dll中放到bin目錄下,將aspx文件直接拷貝過去。這樣做會留下隱患,因為aspx文件就直接暴露在最後的發行包中,如果完全是codeb-behind模型還好,只能改改界面,如果採用了頁面上的來生成頁面,源代碼就暴露了。針對這些問題,vs2005採用了一種新的模式。
請參看ASP.NET 編譯工具 (Aspnet_compiler.exe) 這篇文章了解對各種文件的處理方式。
IDE發布:
vs2005中選擇 生成-〉發布網站,在對話框中的操作將映射到aspnet_compiler.exe的參數中,可更新的發布對應 -u,其他選項類似,請參考上面的文章了解。
注意:發布時將忽略web.config中的debug參數,統一生成無調試信息的文件。
手工編譯:
簡單說來,如果是無更新發布模式編譯,appcode下面的class編譯成dll放在bin下,頁面內容清空位置不變作佔位用,同時頁面被編譯成一個隨機名稱的dll,增加一個同名.compiled文件到bin目錄下,內容大概如下:
<?xml version="1.0" encoding="utf-8"?>
<preserve resultType="3" virtualPath="/Forum/AdminList.aspx" hash="6772609c3" filehash="49154463f1d6738c" flags="110000" assembly="App_Web_hmrycg3w" type="ASP.forum_adminlist_aspx">
<filedeps>
<filedep name="/Controls/footer.ascx" />
<filedep name="/Controls/header.ascx" />
<filedep name="/Forum/AdminList.aspx" />
<filedep name="/Forum/AdminList.aspx.cs" />
<filedep name="/Forum/menu.ascx" />
<filedep name="/Forum/menu.ascx.cs" />
</filedeps>
</preserve>
裡面只是列出了頁面上的customcontrol,這里已經完成了和masterfile的映射。這樣最大限度的保護了頁面的敏感信息,發布過的網站中只能看見一堆文件名了。可更新的發布模式與vs2003類似,頁面就直接拷貝過來不予編譯了。
講了一堆原理,下面說一下aspnet_compiler.exe的調用方法,這是我使用的例子
我的開發目錄是這樣的
Project/
library/
devroot/
pubroot/
proj.sln
使用的命令如下:
aspnet_compiler -v / -p .\devroot -f .\pubroot
分析:
-v / 指明了iis的虛擬目錄
-p .\devroot 表示代碼實際位置
.\pubroot 指明了要發布的位置
-f 表示強制改寫目標位置
你還可以用-u來進行傳統意義上的預編譯,-d來插入編譯符號。
總的來說,aspnet_compile結合msbuild,提供了一個很好的自動化編譯環境,值得研究研究:)
Ⅵ 如何:在命令提示符處進行編譯求解答
使用.NET Framework SDK 提供的 Visual C# 和 Visual Basic 編譯器。本主題介紹如何使用批處理文件針對 .NET Compact Framework 程序集而非 .NET Framework 全功能版(桌面)程序集在命令提示符處進行編譯。可以直接使用批處理文件或從 make 文件實用工具調用批處理文件來使 .NET Compact Framework 集成到企業生成系統。使用MSBuild 進行編譯使用MSBuild 在命令提示符處進行編譯在命令提示處,定位到 .NET Compact Framework 應用程序的項目文件所在的目錄。項目文件具有 .sln、.vbproj 或 .csproj 擴展名。 鍵入msbuild.exe,後面跟隨項目文件。「命令提示符」窗口將提供有關生成過程的信息。 用於命令提示符編譯的批處理文件下表描述了命令提示符編譯所需的文件、命令和參數。 要求 說明.NET Compact Framework 程序集默認位於 C:\Program Files\Microsoft.NET\SDK\v2.0\CompactFramework\WindowsCE 文件夾中。您可以在批處理文件或 make 文件中指定該路徑,或者使用「我的電腦」屬性對話框將其指定為一個環境變數。系統路徑變數包括 .NET Framework SDKVisual Basic 編譯器 (vbc.exe) 和 Visual C# 編譯器 (csc.exe) 位於 %systemroot%\Microsoft.NET\Framework\<version 2.0> 文件夾中。系統路徑變數必須包括此路徑。-r根據需要引用程序集。您可以通過設置環境變數來指定程序集,如 REF。默認情況下會引用大多數 .NET Compact Framework 程序集。請注意,C# 需要顯式引用 Mscorlib.dll,Visual Basic 使用 -sdkpath 開關來定位此文件。-importsVisual Basic 需為以下命名空間進行顯式導入:Microsoft.VisualBasicSystem.System.DataSystem.DrawingSystem.Windows.Forms-nostdlb指示Visual C# 編譯器忽略 .NET Framework 全功能版(桌面)的程序集。-netcf指示Visual Basic 編譯器忽略 .NET Framework 全功能版(桌面)的程序集。-noconfig必選。-sdkpath需要Visual Basic 來定位 Mscorlib.dll。批處理文件需要以下信息:.NET Compact Framework 程序集位置的路徑變數。這些示例使用 NETCF_PATH。根據需要使用 -r 開關引用程序集(串聯成一個變數)。帶有所需開關和參數的編譯器命令。這些參數包括變數引用、用於合並其他參數的星號 (*) 和輸入到命令提示以運行批處理文件的源文件的名稱。創建編譯用的批處理文件在文本編輯器中創建一個新文件,然後針對您的首選編程語言添加示例批處理文件的內容,如下面的示例所示。如有必要,調整 NETCF_PATH 變數。保存並命名該文件,例如,可以將 Visual Basic 批處理文件命名為 vbcc.bat,將 C# 批處理文件命名為 cscc.bat。使用批處理文件編譯應用程序在命令提示符下輸入該批處理文件的名稱,然後輸入源文件,如下面的示例所示:vbcc myapp.vb可復制到設備或模擬程序的可執行文件將在當前目錄中生成。用於C# 編譯的批處理文件下面是一個用於 C# 編譯的示例批處理文件。 @echo off if "%NETCF_PATH%" == "" ( set NETCF_PATH=c:\Program Files\Microsoft.NET\SDK\v2.0\CompactFramework\WindowsCE) if not "%REF%" == "" goto compile set REF=%REF% "/r:%NETCF_PATH%\MsCorlib.dll" set REF=%REF% "/r:%NETCF_PATH%\System.Data.dll" set REF=%REF% "/r:%NETCF_PATH%\System.dll" set REF=%REF% "/r:%NETCF_PATH%\System.Drawing.dll" set REF=%REF% "/r:%NETCF_PATH%\System.Messaging.dll" set REF=%REF% "/r:%NETCF_PATH%\System.Net.IrDA.dll" set REF=%REF% "/r:%NETCF_PATH%\System.Web.Services.dll" set REF=%REF% "/r:%NETCF_PATH%\System.Windows.Forms.DataGrid.dll" set REF=%REF% "/r:%NETCF_PATH%\System.Windows.Forms.dll" set REF=%REF% "/r:%NETCF_PATH%\Microsoft.WindowsCE.Forms.dll" set REF=%REF% "/r:%NETCF_PATH%\System.Xml.dll" :compile csc -nostdlib -noconfig %REF% %* 用於Visual Basic 編譯的批處理文件下面是一個用於 Visual Basic 編譯的示例批處理文件。 @echo off if "%NETCF_PATH%" == "" ( set NETCF_PATH=c:\Program Files\Microsoft.NET\SDK\v2.0\CompactFramework\WindowsCE) if not "%REF%" == "" goto compile set REF=%REF% "/r:%NETCF_PATH%\System.Data.dll" set REF=%REF% "/r:%NETCF_PATH%\System.dll" set REF=%REF% "/r:%NETCF_PATH%\System.Drawing.dll" set REF=%REF% "/r:%NETCF_PATH%\System.Messaging.dll" set REF=%REF% "/r:%NETCF_PATH%\System.Net.IrDA.dll" set REF=%REF% "/r:%NETCF_PATH%\System.Web.Services.dll" set REF=%REF% "/r:%NETCF_PATH%\System.Windows.Forms.DataGrid.dll" set REF=%REF% "/r:%NETCF_PATH%\System.Windows.Forms.dll" set REF=%REF% "/r:%NETCF_PATH%\Microsoft.WindowsCE.Forms.dll" set REF=%REF% "/r:%NETCF_PATH%\System.Xml.dll" set REF=%REF% "/r:%NETCF_PATH%\Microsoft.VisualBasic.dll" set IMP= /Imports:Microsoft.VisualBasic,System,System.Data set IMP=%IMP% ,System.Drawing,System.Windows.Forms :compile vbc -sdkpath:%NETCF_PATH% -noconfig -netcf %IMP% %REF% %* 請參見其他資源生成應用程序和核心任務
Ⅶ 使用MSBuild編譯與使用VS編譯有什麼不同嗎
vs就是調用msbuild編譯的。前提是你獨立用msbuild,你參數得用對,你可以和vs輸出窗口(需要打開詳細輸出)的msbuild的命令行對照。舉個例子:
1.在MS.Build.下Task為我們實現了基本的ITask信息。我們可以從這里繼承開始
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceFirstBuildTask
{
publicclassMyBuildTask:Microsoft.Build.Utilities.Task
{
privatestringoutputFile;
[Microsoft.Build.Framework.Required]
publicstringOutputFile
{
get{returnoutputFile;}
set{outputFile=value;}
}
publicoverrideboolExecute()
{
Log.LogWarning("testmessage:"+this.outputFile);
returntrue;
}
}
}
2.用VS重新載入編譯或者是MSBuild控制台編譯:UsingTask:定義:<UsingTask TaskName="TaskName" AssemblyName = "AssemblyName" TaskFactory = "ClassName" Condition="'String A'=='String B'" />
Ⅷ 怎麼在批處理中判斷msbuild 和 vcbuild 是否編譯失敗
C++解決方案和項目都使用MSBuild進行構建,從而取代了原來的構建工具VCBUILD.exe。對於其他的Visual Studio語言和項目類型,MSBuild提供了一樣的靈活性,可擴展性和基於XML的構建支持工具。
Ⅸ 怎樣使用 MSBuild 自動編譯和發布 NET 網站
很多.NET 程序員開發的時候,每次都需要涉及到各個環境的部署問題,但是手工操作的話又容易出錯,而且非常麻煩,我們今來講解怎樣實現自動編譯和發布 .NET 網站。廢話不多講,先講講我的初步實現方案。
MSBuild 自動編譯和發布 NET 網站步驟:
准備工具:GIT版本控制(gitlab),Jenkins, msbuild
1、安裝git版本控制器,提交代碼。(svn好像也可以), 並生成ssh public key上傳到gitlab的ssh key中(個人配置/SSH KEY)。
2、安裝jenkins開源工具。
3、Jenkins安裝git plugin, Msbuild插件(Manager Jenkins/Manage Plugins)
4、配置Jenkins中的git(Manager Jenkins/Configure System)在git欄中輸入name和Path: git install path\cmd\git.exe
5、添加對應.NET framework version MSBuild
Name: .NET4.0
Path to MSBuild:
%system%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
6、建立.NET項目文件,並添加MSBuild文件
建立一個解決方案nonsuch.sln,裡麵包含一個website: nonesuch.web.
在解決方案根目錄建立一個xml文件,改名為: build.targets