I would like to leverage visual studio code coverage ability out side Visual Studio as diagnostic test on environment without a Visual Studio instance on it.
I could not grab a tutorial or guideline on how it is done.
So how it can be done?
Even guidelines are good.
In Visual Studio 2012 or newer you can use the vstest.console.exe to invoke tests to gather code coverage. the /enableCodeCoverage commandline switch enables it.
You can gather coverage from a commandline using the older vsperfcmd tool as well. This requires you to have at least a Visual Studio Test Agent installed on the machine. This is no full Visual Studio installation, but it contains teh components required to run tests and gather coverage details.
How to setup the VsPerfCmd tool can be found here in this MSDN post. I copied the steps:
I assume you want code coverage on MyApp.exe
Open Visual studio command prompt
Add %ProgramFiles%\Microsoft Visual Studio 10\Team Tools\Performance Tools to the path
set path=%path%;'%ProgramFiles%\Microsoft Visual Studio 10\Team Tools\Performance Tools'
CD to the folder that contains MyApp.exe
Instrument MyApp.exe for coverage:
vsinstr -coverage MyApp.exe
Start the coverage monitor to collect code coverage data:
vsperfcmd -start:coverage -output:MyApp.coverage
Run the instrumented MyApp.exe:
MyApp.exe
Shut down the monitor once MyApp.exe is done:
vsperfcmd -shutdown
Open the MyApp.coverage file in Visual Studio
With the Test Agent installed on the machine, you can also trigger a test run from Visual Studio (even if it is installed on a different machine).
Related
I have a placeholder test setup with cmake and I'm using the Visual Studio (2017) integration. How can I run a test in verbose mode from within VS?
Test Explorer
After you run the test, VS shows an "Output" button in the task explorer where you can see all the test outputs.
While I am building own Visual Studio Extension in TeamCity (same applies to any CI server build that supports building VS solutions), my build stucks on the step DeployVsixExtensionFiles. As far as I understand, the target is defined in VS Extensibility files and is being imported into any .csproj by default. I also realize that this is an "aka test" step that tries to embed an extension into a virtual copy of VS via running a command:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe /RootSuffix Exp /ResetSettings General.vssettings /Embedding /Command File.Exit
I have two questions:
1. Should I disable this step for Release build of Extension?
2. If yes, how can this be done.
The VS SDK installs the extension as a part of a build so you can F5 and run it. If you're CI system doesn't care about that, update your CI configuration to pass /p:DeployExtension=false to MSBuild.
I have class library project which reads word document files. and I have created 30 unit cases scenarios for it. When I run the unit test using visual studio IDE it runs perfectly and all the test cases get "Success", However when I use Visual Studio Command Prompt and test it, some of the test cases get failed. I would appreciate if you guys can provide me some hint in this regard.
To test my solution in Command Prompts I type: "MSTest /testcontainer:mysolutiontest.dll"
If you are running VS2012 or later, use vstest.console.exe:
"C:\Program Files (x86)\Microsoft Visual Studio
12.0\Common7\ide\CommonExtensions\Microsoft\TestWindow\vstest.console.exe"
PathToYour.dll /logger:trx
You'll also probably want to use a .runsettings file to specify the TargetPlatform and ResultsDirectory, which would then use a command line like this:
"C:\Program Files (x86)\Microsoft Visual Studio
12.0\Common7\ide\CommonExtensions\Microsoft\TestWindow\vstest.console.exe"
PathToYour.dll /logger:trx
/settings:PathToYour.runsettings
My configuration:
VS2010 solution
TFS 2008
Build server - TFS 2008
Build server also has VS2008 Team Suite and VS2010 ultimate installed
TFS 2008 builds my VS2010 solution properly. But when it comes time to run the unit tests I get the following MsTest error.
Using "TestToolsTask" task from
assembly "D:\Program Files\Microsoft
Visual Studio
9.0\Common7\IDE\PrivateAssemblies\Microsoft.VisualStudio.QualityTools.MSBuildTasks.dll".
Task "TestToolsTask" Command:
d:\Program Files\Microsoft Visual
Studio 10.0\Common7\IDE\MSTest.exe
/nologo
/searchpathroot:"D:\Builds\App\Source\86\Binaries"
/resultsfileroot:"D:\Builds\App\Source\86\TestResults"
/testcontainer:"D:\Builds\App\Source\86\Binaries\\Tests.dll"
/publish:"http://tfsServer:8080/"
/publishbuild:"vstfs:///Build/Build/26029"
/teamproject:"Proposal" The
"TestToolsTask" task is using
"MSTest.exe" from "d:\Program
Files\Microsoft Visual Studio
10.0\Common7\IDE\MSTest.exe". No platform specified for publish
operation. For switch syntax, type
"MSTest /help"
MSBUILD : warning MSB6006: "MSTest.exe" exited with code 1.
[D:\Builds\App\Source\86\BuildType\TFSBuild.proj]
The previous error was converted to a
warning because the task was called
with ContinueOnError=true. Build
continuing because "ContinueOnError"
on the task "TestToolsTask" is set to
"true". Done executing task
"TestToolsTask" -- FAILED.
I am not sure what is causing MsTest to fail.
Things tried:
- Provided write access to the build folder to the service account that builds the source on the build machine
You can execute a VS2010 build from within TFS2008's MSBuild, but it looks as if it's using Visual Studio 9.0 TestToolsTask (2008) to try to run a Visual Studio 10.0 (2010) test project (MSTest.exe). I'd try tweaking MSBuild to run the TestToolsTask from the "Microsoft Visual Studio 10.0" folder rather than "9.0", so that the entire process is using the same version of the tools. You can override the tools paths in your tfsbuild.proj file's Properties to ensure the correct version of Visual Studio is used to build with - something similar may apply to the test tools.
Alternatively, it's running the VS2010 test tools correctly, but still trying to use a command line that is specific to 2008 - check the settings and see if you can tweak the command line (you may need to override the MS targets files that is running the build if it's a 2008 version). For example in TFS 2010, a lot of command lines changed from using a simple "server:MyServer" to something like "collection:http://MyServer:8080/tfs/MyCollection". You may therefore have to alter the command line to gain full compatibility with the 2010 version of the tool that is now running, even if it still ultimately points at a 2008 server.
My third suggestion (which isn't necessarily very helpful) is to just upgrade to TFS2010 - it's typically a painless install, vastly better than 2008, and will eliminate any difficulties caused by using a hybrid 2008/2010 setup. (If it helps, I was reluctant to upgrade to 2010 because the 2005->2008 upgrade was 8 days of sheer hell. But in comparison the core of the upgrade to 2010 only took a few hours and "just worked" - the install/upgrade process is much improved)
Jason had the correct idea that lead me down to the correct solution.
In my case, I had to update the "Microsoft.TeamFoundation.Build.targets" to point to "Microsoft.TeamFoundation.Build.ProcessComponents.dll" (VS2010 dll) instead of "Microsoft.VisualStudio.QualityTools.MSBuildTasks.dll" (VS2008 dll)
I also had to make sure that the PlatformToBuild was specified in the TfsBuild.proj file.
Once these 2 steps were done, UnitTests were being run as part of the CI build using TFS2008 and a VS2010 solution.
I have blogged about the solution in detail here: http://blog.aggregatedintelligence.com/2011/03/vs2010-tfs-2008-and-unit-tests.html
Is there any powershell script exist to build visual studio project without open visual studio?
You don't even need power shell or visual studio. Just use the msbuild program installed with .Net. Usage example is like this:
msbuild DBMigration.csproj /p:Configuration=Debug
msbuild is located at C:\Windows\Microsoft.NET\Framework\v3.5 (or select your version)
There is also a powershell build system, https://github.com/JamesKovacs/psake