a way to see prebuild steps output in console? - visual-studio-2010

I compile in pre build step another project that takes time - don't see any output in console I'm just waiting. Is there a way to output it to console as well?

You will need to change the verbosity of the MS Build (I think).
Goto Tools, Options..., Project and Solutions, Build and Run and change the MSBuild project build output verbosity

Related

Run custom tool before each build even if it is up-to-date

I want to embed the output of git describe --dirty --always --tags into my program to easily differentiate different versions of the same executable. To do so I generate a source file containing the output of said command.
Since the command produces a string that ends with dirty if there are any modified files in my worktree that are not yet committed I cannot really define a trigger when to re-generate my source file (e.g. as show in this answer).
To solve this problem I wrote a batch script which compares the content of the existing source file and the output of the git command and re-generates the source file only if necessary.
My problem now is that I need to run this batch script before each build, even if msbuild considers the project up-to-date. I tried to use a Pre-Build Event but it is not triggered if the project is up-to-date. I also tried a Custom Build Step and configured a non-existing file as output (this is also an accepted answer here). This causes my batch script to always execute but it also causes code generation being executed for the project even if my generated source file did not change.
4>------ Build started: Project: TestProject, Configuration: Release Win32 ------
4> Current git Version is 9.6-13-g2c753a1727-dirty
4> Include with version number is up-to-date
4> Generating code
4> 0 of 9106 functions ( 0.0%) were compiled, the rest were copied from previous compilation.
4> 0 functions were new in current compilation
4> 0 functions had inline decision re-evaluated but remain unchanged
4> Finished generating code
4> TestProject.vcxproj -> C:\bin\TestProject.exe
4> TestProject.vcxproj -> C:\bin\TestProject.pdb (Full PDB)
I tried it with Execute Before set to ClCompile. Might this be the cause? I also tried some others but with the same effect.
How can I always run my batch script but make the project only produce a new executable if my generated source file was updated?
How can I always run my batch script but make the project only produce
a new executable if my generated source file was updated?
Try adding <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck> into PropertyGroup:
<PropertyGroup Label="Globals">
...
<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
</PropertyGroup>
Then VS will always run the project, and if the output xx.exe is up-to-date with no changes to xx.cpp files, the ClCmpile target won't actually create new xx.exe.
Update:
I create a new simple C++ project, set it release mode, and add the DisableFastUpToDateCheck property. Now the vs will always build the project.
I both use the pre-build event and custom target which execute before ClCompile to execute the command git describe --dirty --always --tags.
Now my msbuild output log verbosity is minimal.
1.Build the project:
2.Change nothing to source file,build the project again:
3.Do the same action like #2. And same result.
4.Add a comment the xx.cpp(Not affect the code), build the project:
5.Msbuild project build output verbosity is a good tool when you try to get details about what happen in the build process. For me, I always set it to Detailed. For this issue, if we set it to Normal we can find:
In my opinion:
When I change something in code, the message is 1 of 10 functions (10.0%) were compiled, the rest were copied from previous compilation. And after comparing #1 and #4, we can conclude when it shows 0 of xxx functions were compiled, it actually not spend time generating code, so it won't affect time of your build process.
For the reason why it creates new executable, please see this document. In vs, most of the targets have their inputs and outputs. Like ClCompile target, xx.h files and xx.cpp files are its inputs. Whether this target will execute doesn't depend on if the output files are earlier than inputs.
For example: When I add a comment in xx.cpp, code actually not change. But since now the xx.cpp is newer than output xx.exe from earlier build. Then this time the build engine will execute ClCompile and Link target to create new xx.exe. And code generation is part of Link target, since no changes to code itself, it will show 0 of xxx functions were compiled to indicate it won't really generate though this time new xx.exe will be created.
So in normal situation the DisableFastUpToDateCheck do work for this situation like #2 and #3. According to the pic you shared above, you must do something which not change the code content(0 functions were compiled) in source files but update the modified date of input files.

How to generate .trx result file after TFS build instead of code coverage?

I recently added xxx.runsettings file to my solution to pass parameters from TFS variables to my solution(url). Now I'm not able to generate .trx result file after running TFS build in Test summary/results page, only code coverage is generated.
[.runsettings code taken from here-https://msdn.microsoft.com/en-us/library/jj635153.aspx
Can anyone here tell me how to edit the runsettings file in order to show .trx result file in my test summary instead of code coverage?
TFS 2015 Update 3,TFS ms build
Can see this window once build is completed.
Run functional test Logs
Publish results log -
Logs
2017-06-21T17:20:49.9138829Z Executing the powershell script: C:\agent\tasks\PublishTestResults\1.0.22\PublishTestResults.ps1
2017-06-21T17:20:50.0628925Z ##[warning]No test result files were found using search pattern 'C:\agent_work\2\s**\TestResults\xyz*.trx'.
Just remove <ResultsDirectory>.\TestResults</ResultsDirectory> section from the runsettings file should fix your issue.
By the way, Publish Test Result task does not work in your scenario since it can only publish the test result files on the build agent while the trx file is usually generated on the test agent with Run Functional Test task.
Since you are running the VStest. Which will not generate the .trx result file.
VStest step is actually using VSTest.Console.exe command, it will use the /logger:TfsPublisher which not generate the .trx file. So if you use the built-in tasks such as Visual Studio Test or Run Functional Tests to run tests, results are automatically published and you do not need a separate publish test results task.
To log results into a Visual Studio Test Results File (TRX) use /Logger:trx. More details please refer this command. To generate a .trx file is not related to runsettings file.
For TFS , the test result is automatically published, you could click test run for more details.

TeamCity and CTest test results

I have a number of unit tests written for my project, executed with CTest. I would like to integrate the results into my TeamCity build. I've downloaded and set up the plugin for my testing framework (Boost Test).
The problem that I have run into is that the tests run with CTest output to Testing/Temporary/LastTest.log, whereas TeamCity is trying to read the results from standard out. To get around this, my testing step is.
make test
cat Testing/Temporary/LastTest.log
which works, but feels like a hack.
Is there any way to get TeamCity to read from this file in addition to standard out? Alternatively, is there any way to tell ctest to output to standard out in addition to this LastTest.log file?
This question is similar, but I would like it to work for all output rather than just on failure: CMake: setting an environmental variable for ctest (or otherwise getting failed test output from ctest/make test automatically)
Teamcity has additional build features which allow to process CTest reports. I am not sure if it'll work or not but you could try adding an additional build feature in your build step to read CTest report.

Which MSBuild tasks initiate a call to SGen?

I have inherited a complex MSBuild script which builds & deploys multiple solutions. When I run the script I see the following error in log:
SGEN: Cannot generate serialization assembly
C:\B\268\Agents\Agents.XmlSerializers.dll
because it already exists. Use /force to force an overwrite of the
existing assembly.
I agree that Agents.XmlSerializers.dll exists. What I can't determine is which task caused it to be created and which one initiated the attempt to re-create it.
I have searched through the files in the build hierarchy for 'SGen' and found nothing. So I presume that SGen is called implicitly by two (or more) of the tasks in the build.
Can anyone point out what might call SGen?
Thanks.
In the Build Output window, look for...
Task "SGen"
Right above that is the actual "sgen.exe" command.
And as Pawell said, you need full details in your build output. Inside of Studio, it's Tools - Options... - Projects and Solutions - Build and Run - MSBuild project build output verbosity: Diagnostic.

Teamcity Custom Script Log Output

I use a very basic Custom Script in TeamCity 7.0.3 which uses Visual Studio 2010 to build a solution and its installers.
The build was failing and the only relevant error in the TeamCity Build Log is
[13:17:13]Process exited with code 1
When I run the same script from the console, I get a lot of helpful errors about why the build failed.
How can I get TeamCity to include the errors from devenv.exe?
You need to report back the additional info to TeamCity in a way it can interpret.
Look at this article to see how to do it:
http://confluence.jetbrains.net/display/TCD7/Build+Script+Interaction+with+TeamCity
For a basic example:
You can report messages for build log in the following way:
##teamcity[message text='<message text>' errorDetails='<error details>' status='<status value>']

Resources