2014-03-26 101 views
6

我想調試一個使用msbuild的構建過程。我正在嘗試關注this文件。無法調試msbuild

我這樣做是爲了添加所需的註冊表項

reg add HKLM\SOFTWARE\Microsoft\MSBuild\4.0 /v DebuggerEnabled /d true 

enter image description here

然而,當我嘗試 msbuild.exe /?

我沒有看到一個調試開關

C:\Program Files (x86)\Microsoft Visual Studio 11.0>msbuild.exe /? 
Microsoft (R) Build Engine version 4.0.30319.17929 
[Microsoft .NET Framework, version 4.0.30319.18063] 
Copyright (C) Microsoft Corporation. All rights reserved. 

Syntax:    MSBuild.exe [options] [project file] 

Description:   Builds the specified targets in the project file. If 
        a project file is not specified, MSBuild searches the 
        current working directory for a file that has a file 
        extension that ends in "proj" and uses that file. 

Switches: 

    /target:<targets> Build these targets in this project. Use a semicolon or a 
        comma to separate multiple targets, or specify each 
        target separately. (Short form: /t) 
        Example: 
         /target:Resources;Compile 

    /property:<n>=<v> Set or override these project-level properties. <n> is 
        the property name, and <v> is the property value. Use a 
        semicolon or a comma to separate multiple properties, or 
        specify each property separately. (Short form: /p) 
        Example: 
         /property:WarningLevel=2;OutDir=bin\Debug\ 

    /maxcpucount[:n] Specifies the maximum number of concurrent processes to 
        build with. If the switch is not used, the default 
        value used is 1. If the switch is used without a value 
        MSBuild will use up to the number of processors on the 
        computer. (Short form: /m[:n]) 

    /toolsversion:<version> 
        The version of the MSBuild Toolset (tasks, targets, etc.) 
        to use during build. This version will override the 
        versions specified by individual projects. (Short form: 
        /tv) 
        Example: 
         /toolsversion:3.5 

    /verbosity:<level> Display this amount of information in the event log. 
        The available verbosity levels are: q[uiet], m[inimal], 
        n[ormal], d[etailed], and diag[nostic]. (Short form: /v) 
        Example: 
         /verbosity:quiet 

    /consoleloggerparameters:<parameters> 
        Parameters to console logger. (Short form: /clp) 
        The available parameters are: 
         PerformanceSummary--Show time spent in tasks, targets 
          and projects. 
         Summary--Show error and warning summary at the end. 
         NoSummary--Don't show error and warning summary at the 
          end. 
         ErrorsOnly--Show only errors. 
         WarningsOnly--Show only warnings. 
         NoItemAndPropertyList--Don't show list of items and 
          properties at the start of each project build. 
         ShowCommandLine--Show TaskCommandLineEvent messages 
         ShowTimestamp--Display the Timestamp as a prefix to any 
          message. 
         ShowEventId--Show eventId for started events, finished 
          events, and messages 
         ForceNoAlign--Does not align the text to the size of 
          the console buffer 
         DisableConsoleColor--Use the default console colors 
          for all logging messages. 
         DisableMPLogging-- Disable the multiprocessor 
          logging style of output when running in 
          non-multiprocessor mode. 
         EnableMPLogging--Enable the multiprocessor logging 
          style even when running in non-multiprocessor 
          mode. This logging style is on by default. 
         Verbosity--overrides the /verbosity setting for this 
          logger. 
        Example: 
         /consoleloggerparameters:PerformanceSummary;NoSummary; 
               Verbosity=minimal 

    /noconsolelogger Disable the default console logger and do not log events 
        to the console. (Short form: /noconlog) 

    /fileLogger[n]  Logs the build output to a file. By default 
        the file is in the current directory and named 
        "msbuild[n].log". Events from all nodes are combined into 
        a single log. The location of the file and other 
        parameters for the fileLogger can be specified through 
        the addition of the "/fileLoggerParameters[n]" switch. 
        "n" if present can be a digit from 1-9, allowing up to 
        10 file loggers to be attached. (Short form: /fl[n]) 

    /fileloggerparameters[n]:<parameters> 
        Provides any extra parameters for file loggers. 
        The presence of this switch implies the 
        corresponding /filelogger[n] switch. 
        "n" if present can be a digit from 1-9. 
        /fileloggerparameters is also used by any distributed 
        file logger, see description of /distributedFileLogger. 
        (Short form: /flp[n]) 
        The same parameters listed for the console logger are 
        available. Some additional available parameters are: 
         LogFile--path to the log file into which the 
          build log will be written. 
         Append--determines if the build log will be appended 
          to or overwrite the log file. Setting the 
          switch appends the build log to the log file; 
          Not setting the switch overwrites the 
          contents of an existing log file. 
          The default is not to append to the log file. 
         Encoding--specifies the encoding for the file, 
          for example, UTF-8, Unicode, or ASCII 
        Default verbosity is Detailed. 
        Examples: 
         /fileLoggerParameters:LogFile=MyLog.log;Append; 
              Verbosity=diagnostic;Encoding=UTF-8 

         /flp:Summary;Verbosity=minimal;LogFile=msbuild.sum 
         /flp1:warningsonly;logfile=msbuild.wrn 
         /flp2:errorsonly;logfile=msbuild.err 

    /distributedlogger:<central logger>*<forwarding logger> 
        Use this logger to log events from MSBuild, attaching a 
        different logger instance to each node. To specify 
        multiple loggers, specify each logger separately. 
        (Short form /dl) 
        The <logger> syntax is: 
         [<logger class>,]<logger assembly>[;<logger parameters>] 
        The <logger class> syntax is: 
         [<partial or full namespace>.]<logger class name> 
        The <logger assembly> syntax is: 
         {<assembly name>[,<strong name>] | <assembly file>} 
        The <logger parameters> are optional, and are passed 
        to the logger exactly as you typed them. (Short form: /l) 
        Examples: 
         /dl:XMLLogger,MyLogger,Version=1.0.2,Culture=neutral 
         /dl:MyLogger,C:\My.dll*ForwardingLogger,C:\Logger.dll 

    /distributedFileLogger 
        Logs the build output to multiple log files, one log file 
        per MSBuild node. The initial location for these files is 
        the current directory. By default the files are called 
        "MSBuild<nodeid>.log". The location of the files and 
        other parameters for the fileLogger can be specified 
        with the addition of the "/fileLoggerParameters" switch. 

        If a log file name is set through the fileLoggerParameters 
        switch the distributed logger will use the fileName as a 
        template and append the node id to this fileName to 
        create a log file for each node. 

    /logger:<logger> Use this logger to log events from MSBuild. To specify 
        multiple loggers, specify each logger separately. 
        The <logger> syntax is: 
         [<logger class>,]<logger assembly>[;<logger parameters>] 
        The <logger class> syntax is: 
         [<partial or full namespace>.]<logger class name> 
        The <logger assembly> syntax is: 
         {<assembly name>[,<strong name>] | <assembly file>} 
        The <logger parameters> are optional, and are passed 
        to the logger exactly as you typed them. (Short form: /l) 
        Examples: 
         /logger:XMLLogger,MyLogger,Version=1.0.2,Culture=neutral 
         /logger:XMLLogger,C:\Loggers\MyLogger.dll;OutputAsHTML 

    /validate   Validate the project against the default schema. (Short 
        form: /val) 

    /validate:<schema> Validate the project against the specified schema. (Short 
        form: /val) 
        Example: 
         /validate:MyExtendedBuildSchema.xsd 

    /ignoreprojectextensions:<extensions> 
        List of extensions to ignore when determining which 
        project file to build. Use a semicolon or a comma 
        to separate multiple extensions. 
        (Short form: /ignore) 
        Example: 
         /ignoreprojectextensions:.sln 

    /nodeReuse:<parameters> 
        Enables or Disables the reuse of MSBuild nodes. 
        The parameters are: 
        True --Nodes will remain after the build completes 
          and will be reused by subsequent builds (default) 
        False--Nodes will not remain after the build completes 
        (Short form: /nr) 
        Example: 
         /nr:true 

    /preprocess[:file] 
        Creates a single, aggregated project file by 
        inlining all the files that would be imported during a 
        build, with their boundaries marked. This can be 
        useful for figuring out what files are being imported 
        and from where, and what they will contribute to 
        the build. By default the output is written to 
        the console window. If the path to an output file 
        is provided that will be used instead. 
        (Short form: /pp) 
        Example: 
         /pp:out.txt 

    /detailedsummary 
        Shows detailed information at the end of the build 
        about the configurations built and how they were 
        scheduled to nodes. 
        (Short form: /ds) 

    @<file>   Insert command-line settings from a text file. To specify 
        multiple response files, specify each response file 
        separately. 

        Any response files named "msbuild.rsp" are automatically 
        consumed from the following locations: 
        (1) the directory of msbuild.exe 
        (2) the directory of the first project or solution built 

    /noautoresponse Do not auto-include any MSBuild.rsp files. (Short form: 
        /noautorsp) 

    /nologo   Do not display the startup banner and copyright message. 

    /version   Display version information only. (Short form: /ver) 

    /help    Display this usage message. (Short form: /? or /h) 

Examples: 

     MSBuild MyApp.sln /t:Rebuild /p:Configuration=Release 
     MSBuild MyApp.csproj /t:Clean 
          /p:Configuration=Debug;TargetFrameworkVersion=v3.5 


C:\Program Files (x86)\Microsoft Visual Studio 11.0> 

我在做什麼錯?

回答

7

您是在x64操作系統和運行x86的過程,所以你應該設置

HKLM\SOFTWARE\Wow6432Node\Microsoft\MSBuild\4.0 

如果你想擁有它同時適用於(x86和x64)的MSBuild

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\4.0] 
"DebuggerEnabled"="true" 

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSBuild\4.0] 
"DebuggerEnabled"="true" 
+0

這一個爲我工作!謝謝 –

0

是註冊表鍵在32位區域?您的命令行正在執行msbuild的32位版本,但是它從註冊表截圖顯示註冊表項在64位部分。這在一篇鏈接文章的評論中特別提到。

+0

也許你可以說一些關於32位版本密鑰的名字? – SamB

2

這停止了爲我工作,並沒有解決方案,我在網上找到工作。

後來我開始在MSBuild反彙編中尋找其他原因,看到它仍然嵌入了調試代碼,但它們已經更改了標誌。

爲了得到這個工作(至少它爲我的作品在VS 2013)執行以下操作:在

  1. 打開Enable Just My Code 「的Visual Studio - >調試 - >常規」

  2. 將環境變量'MSBUILDDEBUGGING'設置爲'1'即命令行上的set MSBUILDDEBUGGING=1

  3. 在項目上運行MSBuild。它應該在幾秒鐘之內要求一個調試器,一旦你連接,它應該是在你的MSBuild

的第一行通過代碼挖掘後,我看不到任何其他方式調試可以啓用了VS 2013中包含的MSBuild版本(除非他們正在使用反射來處理東西,他們沒有理由這樣做)。檢查的變量是私有的,並且只能通過讀取該環境變量來設置。

+0

實際上,如果您在註冊表項名稱中將「4.0」替換爲「12.0」,並根據情況適當調整WoW64重定向,則註冊表項方法對此MSBuild正常工作。 (我的意思是它給了你那個「/ debug」標誌,我仍然有這個「不匹配的離開」的東西來照顧......) – SamB

6

我需要Palo的回答約Wow6432Node節點,再一個轉折。

當我運行msbuild /?我看到我運行的版本是12.0,所以註冊表項4.0沒有幫助。

當我運行where msbuild我看到msbuild安裝在Program Files (x86)所以我需要Wow6432Node

結合他們兩個:

reg add HKLM\SOFTWARE\Wow6432Node\Microsoft\MSBuild\12.0 /v DebuggerEnabled /d true 

現在msbuild /?顯示調試啓用!