Thursday, October 30, 2014

Cleaning A TFS Workspace

This option doesn’t clean files not under source control that may live in your workspace.  It also doesn’t undo checkouts.

  • Get specific Version…

clip_image001

  • Check the first box for overwriting writable files
  • If you check the second checkbox as well it will download everything

clip_image002

There are other Powertools commands to clean your workspace. Be careful with these as they may delete items you don't have under source control.

  • tfpt scorch – Ensure source control and the local disk are identical
  • tfpt treeclean – Delete files and folders not under version control
del.icio.us Tags: ,

Monday, October 27, 2014

Exception System.IO.FileLoadException, Exception thrown executing tests

We are in the process of moving from CuiseControl.NET and NAnt into TFSBuild.  One of the .NET solutions I was prototyping kept giving me a generic error message when it tried to run the NUnit tests we have.

The message was…

Exception System.IO.FileLoadException, Exception thrown executing tests mytest.dll

Took me a few days but finally came across a post that got me thinking.  Some of our references are fully signed.  So that means the test which is unsigned is trying to call some signed assemblies to execute. 

I first enabled verification skipping on the build machine (see the SN help for this).  That worked and it was able to execute NUnit tests.  But I don’t want that enabled on my build machine.  Having that could result in files not getting signed and deployed.  This would result in runtime errors in our environments.

The solution is to add a line similar to this on the MSBuild arguments (under Advanced) for your build definitions.  It will look something like this:

/p:SignAssembly=true,DelaySign=false,AssemblyOriginatorKeyFile=..\..\Global\MyPrivateKey.snk

 

del.icio.us Tags: ,

Wednesday, October 22, 2014

Deleting a Branch or Folder in TFS Without Getting The Whole Branch in Your Workspace

imageOne of our teams has a rather large branch consisting of some 53k files.  Using one of the IDE’s it requires you to have the latest of the branch before the Delete option will no longer be grayed out.  This results in frustration by the team as they regularly delete feature branches after it has been merged to their Integration branch.  There does not seem to be a way in Visual Studio 2013 to not do a recursive get latest.

Did some searching on the internet and Stackoverflow.com had some answers with very short ways of what I am about to show.  I felt some more detail might help others out there searching for speed.

The first thing you need to do is open a command prompt where the tf.exe command is accessible (or you will need to type the full path to it each command).  Mine is found in C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE.  This is in my PATH but I am not sure if Visual Studio put it there or if I did. 

  1. From the command line go to the folder above the branch you want to delete using CD pathname
  2. In my example I am deleting the Int branch.  So we need to get just that object.  Type in tf get branchname (Ex: tf get Int).  This also got the immediate children into my workspace as well.  Not so bad as getting the entire branch.  The command line has a recursive option if you want to get the whole thing.
  3. Now we delete the branch with a tf delete $/TFS/Path/To/The/Branch  (Ex: Tf delete $/TheMaster/Branches/Unmanaged/sandbox/mrainey/Int)  You can see in my picture above only the branch has a red X on it. 
  4. Last but not least submit the pending changes.  I did this in Visual Studio so I could verify what was in my list of things to check in.  the only thing listed was the branch so it was a simple check in option. 

So just the branch was deleted and none of the children folders/files remain either.  Very clean and quick.

del.icio.us Tags: ,

Thursday, October 9, 2014

TFS PowerShell Script to find and delete files

 

Here is a quick script to find a certain file or file type.  Get latest on it and then mark it for delete.  You will need to review your pending changes to make sure the correct files are being deleted and then manual check the change in.  Enjoy!  I am still playing around with code snippets in my blog so I apologize for word wraps and other bad formatting.

#Script to Find and delete files based on their extension
#
You must be in your local workspace folder when executing this script

if ((Get-PSSnapin -Name Microsoft.TeamFoundation.PowerShell -ErrorAction SilentlyContinue) -eq $null )
{
Add-PsSnapin Microsoft.TeamFoundation.PowerShell -ErrorAction SilentlyContinue
}

$tfs=Get-TFSServer http://tfs.yourdomain.com/tfs/yourcollection
$TFSToolsPath
= "${Env:PROGRAMFILES(x86)}\Microsoft Visual Studio 12.0\Common7\IDE"
Write-Host $TFSToolsPath

$CleanUpList = Get-TfsChildItem -Server $tfs -Recurse $/yourteamproject/*.suo
foreach($file in $CleanUpList){
Write-Host $file.ServerItem -ForegroundColor Cyan
#Get Latest On Each Item
tf get $file.ServerItem
#Delete Each item
tf delete /lock:checkout $file.ServerItem
}