Are you a Builder Reasons You Should Build With Steel and Not Wood
2014 - DotNetCologne: Build, Builder, Am Buildesten
-
Upload
daniel-fisher -
Category
Software
-
view
335 -
download
0
description
Transcript of 2014 - DotNetCologne: Build, Builder, Am Buildesten
lennybacon.com
BUILD BUILD BUILD
Daniel Fisher
lennybacon.com
Daniel Fisher
• Freelancer
– Developer, Architect, Coach, Trainer
• Justcommunity.de
– Mit-Gründer und Vorstand
• nrwconf.de
– Mit-Gründer und Organisator
• netug-niederrhein.de
– Mit-Gründer und Ex-Leiter
• microsoft.com
– Certified Professional Developer
– Business Platform Technology Advisor
• lennybacon.com
– Blog
• twitter.com
– @lennybacon
lennybacon.com
EFFICIENT COMMUNICATION…
lennybacon.com
Objectives
Serious Software Development
Product Delivery
C#/.NET
AppDomains
MsBuild
REST APIs
AngularJS
Code Quality
NuGet
lennybacon.com
Agenda
• What is a Build?
• MsBuild
• Hosting MsBuild in ASP.NET (YABS?)
• MsMetrics, FxCop & Co.
• Nunit
• …
lennybacon.com
WHAT IS A BUILD?
lennybacon.com
https://www.flickr.com/photos/86931652@N00/392470198
lennybacon.com
lennybacon.com
MSBUILD
lennybacon.com
News?
• MSBuild is now installed as part of Visual
Studio rather than as part of the .NET
Framework.
– The current MSBuild version number is 12.0. If
you want to install MSBuild separately, download
the installation package from MSBuild Download
(http://go.microsoft.com/fwlink/?LinkId=309745).
lennybacon.com
Properties
• Named Value Pairs
– Variables of the Build script
• Part of a PropertyGroup
• Referenced as scalar values
– Using the $() syntax
<PropertyGroup><AssemblyName>MyAssemblyName</AssemblyName>
</PropertyGroup>
lennybacon.com
Items
• Items are Inputs
– Source files, references…
• Part of a ItemGroup
• Items are referenced as groups
– Using the @() syntax
<ItemGroup><CSFile Include="MyLib\Class1.cs" /><CSFile Include="MyLib\Properties\AssemblyInfo.cs" /><Reference Include="System.dll" />
</ItemGroup>
lennybacon.com
Targets and Tasks
• Tasks are Steps that are performed in a build
process as Part of a Target
• A build can be told which target(s) to execute
<Target Name="Compile">
<MSBuild
Projects="MyLibrary\MyLibrary.sln"
Properties="Configuration=Release"/>
</Target>
lennybacon.com
Clone-Repository
Update-Version
Update-Dependencies
Generate-Code
Compile-Code
Test-Code
Analyze-Code
Document-Code
…
lennybacon.com
Custom Tasks
public class MyTask : Task
{
override void Execute(){
//TODO: Write your stuff here ...
}
}
lennybacon.com
http://www.flickr.com/photos/64550677@N06/12829392063/
lennybacon.com
http://www.flickr.com/photos/toaireisdivine/7245696024/
lennybacon.com
https://www.flickr.com/photos/seelensturm/4046487038
lennybacon.com
YET ANOTHER BUILD SERVER?
lennybacon.com
© Daniel Fisher
lennybacon.com
Clone-Repository
Update-Version
Update-Dependencies
Generate-Code
Compile-Code
Test-Code
Analyze-Code
Package-Output
Sign-Package
Deploy-Package
Test-DeploymentSign-Output
Publish-Package
Notify-Stakeholders
Document-Code
Generate-Manual
Report-Results
lennybacon.com
lennybacon.com
© Daniel Fisher
lennybacon.com
© Daniel Fisher
lennybacon.com
© Daniel Fisher
lennybacon.com
lennybacon.com
https://www.flickr.com/photos/hectoralejandro/3967217852
lennybacon.com
lennybacon.com
API
GET /api/builds
POST /api/builds
GET /api/builds/{slug}
PUT /api/builds/{slug}
PATCH /api/builds/{slug}
DELETE /api/builds/{slug}
BUILD /api/builds/{slug}
GET /api/runningBuild/{id}
lennybacon.com
lennybacon.com
Custom Verbs with Web API
using System.Net;using System.Net.Http;using System.Web.Http;
namespace WebApplication1.Controllers{public class BuildController : ApiController{[Route("api/builds/{id}")][AcceptVerbsAttribute("GET", "BUILD")]public HttpResponseMessage Build(Guid value){return new HttpResponseMessage(HttpStatusCode.OK);
}}
}
lennybacon.com
https://www.flickr.com/photos/25726169@N03/8600834488
lennybacon.com
HOSTING MSBUILD
lennybacon.com
References
• Microsoft.Build.dll
• Microsoft.Build.Engine.dll
• Microsoft.Build.Framework.dll
lennybacon.com
Programmatically run a build
public bool Run(string msBuildFile, Dictionary<string, string> properties)
{
var envVer = Environment.Version;
var toolsVersion = envVer.Major + "." + envVer.MajorRevision;
var project = new ProjectInstance(msBuildFile, properties, toolsVersion);
var buildRequestData = new BuildRequestData(project, new string[] { });
var buildParameters = new BuildParameters
{
BuildThreadPriority = ThreadPriority.Highest,
DefaultToolsVersion = toolsVersion,
UseSynchronousLogging = true
};
return
BuildManager.DefaultBuildManager.Build(
buildParameters,
buildRequestData
).OverallResult == BuildResultCode.Success;
}
lennybacon.com
https://www.flickr.com/photos/jlauletta/14058076975
lennybacon.com
APPDOMAIN ISOLATION
lennybacon.com
Run in another AppDomain
var appDomainSetup = new AppDomainSetup {
PrivateBinPath = appPath,
ApplicationBase = appPath};var appDomain =
AppDomain.CreateDomain(
appName,new Evidence(AppDomain.CurrentDomain.Evidence),
appDomainSetup);
var proxyObject =
appDomain.CreateInstanceFromAndUnwrap(Assembly.GetExecutingAssembly().Location,
typeof (AppDomainManager).FullName);
AppDomain.Unload(appDomain);
lennybacon.com
https://www.flickr.com/photos/ryan2point0/4986543660
lennybacon.com
READ LENNYBACON.COM
FOLLOW @LENNYBACON
LINK LINKEDIN.COM/IN/LENNYBACON
XING XING.COM/PROFILE/DANIEL_FISHER
FRIEND FB.COM/DANIEL.FISHER.LENNYBACON
MAIL [email protected]
CALL +49 (176) 6159 8612