Sunday, July 3, 2016

Windows and PowerShell versions

Although it's written all over the net i just felt i had to put it also, it makes life easier when using the TFS2015 builds and you know what is missing....



PowerShell Version
Release Date
Default Windows Versions
Available Windows Versions
PowerShell 1.0
November 2006
Windows Server 2008 (*)
PowerShell 2.0
October 2009
Windows 7
Windows Server 2008 R2 (**)
PowerShell 3.0
September 2012
Windows 8
Windows Server 2012
PowerShell 4.0
October 2013
Windows 8.1
Windows Server 2012 R2
PowerShell 5.0
April 2014 (***)
Windows 10

Saturday, April 23, 2016

vNext Build Git

The new TFS2015 Build system is very powerful and easy to use.
but there are still no tasks for git integration and we are forced to use batch / Power Shell scripts.

commit / push
when a git is cloned by the build it creates a detached head (temporary branch)

do this (case sensitive):
git commit "<files>" -m "comment"
git branch -a // show all branches optional
git rebase HEAD <branch name>
git push origin <branch name>

** make sure the build agent user has "Exempt from policy enforcement" set to allow otherwise the push will fail if branch policies exist.

Warning
I have noticed that using pull request with a build policy and the build performs updates to the repository causes the pull request to not function correctly as rebase also pushes the pull request.

branch polices
Although written, for all new users to Git, Visual studio will not let you create a Pull request
(available since VS2015.1) from the same branch locally to the same branch remotely.
the ideal way is to use git flow and create pull request from develop to master


Wednesday, January 6, 2016

Running old XAML build templates on TFS 2015 build server

Recently i arrived to help a client in upgrading their TFS2012 to TFS2015 Update 1.
the upgrade passed successfully without any issues.

however when we tried to run the builds we often got an error the template could not be loaded.



So first thing i did was to verify all the custom build assemblies were upgraded and don't contain "microsoft.teamfoundation.dll" as this assembly is not included since TFS2013 (merged to microsoft.Teamfoundation.Client). sadly this did not help.

after long try and error (google was no help here :(), i found this to be a reference written in the XAML it self.
i opened the XAML in Notepad and found,
there is a section  called "TextExpressions.ReferancesForImplementation" there i found
<AssemblyReference>Microsoft.TeamFoundation</AssemblyReference>
removing this line fixed the problem and the template was able to load

hope this will help you also...

Tuesday, October 6, 2015

TFS2015 API

Microsoft has taken a twist in their API as it now can work in 2 modes:
  • Soap - same objects as before
  • REST - new to TFS 2015, new objects which usually end with "HttpClient"

also now you need to install Nuget packages to get the TFS API dlls.
PackageDescriptionPrimary usage
Microsoft.TeamFoundationServer.ExtendedClientIntegrate with Microsoft Team Foundation Server (2012, 2013, 2015) and Visual Studio Online from desktop-based Windows applications. Work with and manage version control, work items, and build, and other resources from your client application.Existing Windows apps leveraging an older version of the TFS Client OM.
Microsoft.TeamFoundationServer.ClientIntegrate with Team Foundation Server 2015 and Visual Studio Online from desktop-based, ASP.NET, and other Windows applications. Provides access to version control, work item tracking, build, and more via public REST APIs.Window desktop apps and services that need to integrate with TFS 2015 and later and Visual Studio Online.
Microsoft.VisualStudio.Services.ClientIntegrate with Team Foundation Server 2015 and Visual Studio Online from desktop-based, ASP.NET, and other Windows applications. Provides access to shared platform services such as account, profile, identity, security, and more via public REST APIs.Windows desktop apps and services that need to interact with "shared platform" services (account, profile, identity, security, etc).
Microsoft.VisualStudio.Services.InteractiveClientIntegrate with Team Foundation Server 2015 and Visual Studio Online from desktop-based Windows applications that require interactive sign-in by a user.Windows desktop applications not utilizing basic authentication or OAuth for authentication.
taken from: https://www.visualstudio.com/en-us/integrate/get-started/client-libraries/dotnet

as seen in the above table you will need to install the "Microsoft.TeamFoundationServer.ExtendedClient" package to upgrade your old TFS apps.
this package also installs the other packages.
the down side of using these packages is that you get all the references that it contains and you need to remove unnecessary ones (there will be a lot of them).

example for using REST objects can be found at: https://www.visualstudio.com/en-us/integrate/get-started/client-libraries/samples

ImDisk Simple USB Drive

ImDisk is a dll which contains methods to emulate various storage devices (HDD, USB, CD).
unfortunately I haven't seen any seen any examples that i can use.
although there is a very detailed documents on the methods
http://www.ltr-data.se/library/ImDiskNet/html/b33f1e89-3d92-fc08-248d-14c5c2efd549.htm

so here is a simple example how to create a USB drive and disconnect it
// get device handle and free drive letter
uint deviceID = 0;
IntPtr statusControl = IntPtr.Zero;

string driveLetter = ImDiskAPI.FindFreeDriveLetter() + ":";

// create device          
// 40mb = 4096*1024*10
ImDiskAPI.CreateDevice(4096 * 1024 * 10, 0, 0, 0, 0, ImDiskFlags.Removable , @"USB", false, driveLetter, ref deviceID, statusControl);

Console.ReadKey();

// remove device        
ImDiskAPI.APIFlags = DLL.ImDiskAPIFlags.ForceDismount;
ImDiskAPI.RemoveDevice(driveLetter);

Monday, December 29, 2014

TFS2013 Web.Config Transformation in Build

Hi
i have been looking around how to create web.config transformation when using tfs build.
there are 3 options:
  • Use publish profile -         this is done by creating a publish profile (right click on the project and select publish), then add to the build definition, "MSBuild Arguments"
         /p:DeployOnBuild=true /p:PublishProfile=<ProjectLocation>\Properties\PublishProfiles\Test.pubxml
  • Add "xmlTransform" task to the csproj -  open the csproj file for edit (Unload and edit) and add right before the end
<Target Name="TransformConfigFiles" AfterTargets="AfterBuild" Condition="'$(TransformConfigFiles)'=='true'">
    <ItemGroup>
      <DeleteAfterBuild Include="$(WebProjectOutputDir)Web.*.config" />
    </ItemGroup>
    <TransformXml Source="Web.config" Transform="$(ProjectConfigTransformFileName)" Destination="$(WebProjectOutputDir)Web.config" />
    <Delete Files="@(DeleteAfterBuild)" />
</Target>
          in order to control this, you need to add to the build definition, "MSBuild Arguments"
          /p: TransformConfigFiles=true
  • Force MSBuild to run Config transformation - this is done by add to the build definition, "MSBuild Arguments"
          /p:UseWPP_CopyWebApplication=True /p:PipelineDependsOnBuild=False




just don't forge, if you are using TFS2013 with old build templates (2010/2012) you will also need to add "/p:VisualStudioVersion=12.0"

Saturday, November 22, 2014

Import Unit Tests to Test Cases

Using UI Automation and Unit tests in general is a good thing,
but VS does not provide a simple way of associating the tests to test cases.
you have to open a test case and associate the unit test, for one, two it ok,
for more then 10 its very tedious
in VS2010 we had a nice extesion called "Pronto",
in VS 2012 and above this does not work any more.

luckly the TCM command comes very handy here:
tcm testcase /import /collection:http://mytfs:8080/tfs/mycollection /teamproject:"myTeamProject" /storage:"fullpath_to_UT_DLL" [/filter:"test category"] [/syncsuite:"test suite id to update"]

this command will pass over all matching unit tests in the dll and add / update testcases.

MSDN TCM link : http://msdn.microsoft.com/en-us/library/ff942470.aspx