Skip to content

Instantly share code, notes, and snippets.

@jeremybeavon
jeremybeavon / LinqEqualityComparerExtensions.cs
Created April 9, 2015 20:04
LINQ EqualityComparer Extensions
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
namespace LinqEqualityComparerExtensions
{
public sealed class EqualityComparer<T> : IEqualityComparer<T>
{
private readonly Func<T, int> getHashCode;
@jeremybeavon
jeremybeavon / MSBuildHelper.3.5.cs
Last active May 9, 2021 17:51
Programmatically call MSBuild from C#
// Requires the following references:
// Microsoft.Build.Engine
// Microsoft.Build.Framework
using System.Collections.Generic;
using Microsoft.Build.BuildEngine;
public static class MsBuildHelper
{
public static bool RunMsBuild(string projectFile, string target, IDictionary<string, string> properties)
@jeremybeavon
jeremybeavon / MoqExtensions.cs
Created June 24, 2015 02:21
Moq support for ref and out callbacks
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using Moq;
using Moq.Language;
using Moq.Language.Flow;
@jeremybeavon
jeremybeavon / create_sandbox.sql
Last active August 29, 2015 14:27
Create a sandbox for a SQL database using views and triggers
CREATE PROCEDURE [dbo].[create_sandbox_for_schema]
@schema_name nvarchar(max),
@sandbox_name nvarchar(max)
AS
BEGIN
DECLARE sandbox_statements CURSOR FOR
WITH primary_key_columns AS
(
SELECT key_constraints.parent_object_id,
columns.name,
@jeremybeavon
jeremybeavon / gitlog.psm1
Created August 20, 2015 09:57
Powershell script that return an object representing git log
$startString = '@%x22%n'
$endString = '%n%x22@
$dollar = '%x24'
$gitHash = "GitHash=$startString%n$endString"
$author = "Author=$startString%an$endString"
$branch = "Branch=$startString%d$endString -replace '^\s*\([^,]+,\s*[^,]+,\s*(?<BranchName>[^\)]+)\).*$dollar', '$dollar{BranchName}'"
$date = "Date=[datetime]::ParseExact($startString%ad$endString, %x22ddd MMM dd HH:mm:ss zzz", $($dollar)null)"
$logMessage = "LogMessage=$startString%s$endString"
$changes = "Changes=$startString"
$format = "`"$endString},@{$gitHash;$author;$branch;$date;$logMessage;$changes`""
@jeremybeavon
jeremybeavon / powershell.cs
Last active October 30, 2015 01:47
Run powershell script in C#
using System.Management.Automation.Runspaces;
public static class Powershell
{
public static T ExecuteScript<T>(string script, string returnVariableName)
{
using (Pipeline pipeline = RunspaceFactory.CreateRunspace().CreatePipeline())
{
pipeline.Commands.AddScript(script);
pipeline.Runspace.Open();
@jeremybeavon
jeremybeavon / gitcommands.ps1
Last active February 1, 2016 22:55
Handy git commands
# Find number of commits
& git rev-list --all --count
# Find log details for a single commit
& git log -1 $gitHash
# Find log details from a commit
& git log $gitHash..HEAD
# Find log details from a commit including the commit
@jeremybeavon
jeremybeavon / AddStrongName.ps1
Last active December 11, 2015 02:49
Add a strong name to an assembly after compile
& ildasm "$dll" /out:"$dll.il"
& ilasm "$dll.il" /dll /pdb /resource="$dll.res" /key="$key" /output="$dll"
@jeremybeavon
jeremybeavon / CastleBuildProxies.cs
Created December 16, 2015 21:56
Build an assembly with all Castle.Core proxies
private static void BuildProxyAssembly(string assemblyPath)
{
string assemblyName = Path.GetFileNameWithoutExtension(assemblyPath) + ".Proxies";
string modulePath = Path.Combine(Path.GetDirectoryName(assemblyPath), assemblyName + ".dll");
DefaultProxyBuilder proxyBuilder = new DefaultProxyBuilder(new ModuleScope(true, true, assemblyName, modulePath, assemblyName, modulePath));
Assembly assembly = Assembly.LoadFrom(assemblyPath);
var types = from classType in assembly.GetTypes()
where classType.IsClass && !classType.ContainsGenericParameters && !classType.IsAbstract && classType.IsPublic
from interfaceType in classType.GetInterfaces()
where interfaceType.IsPublic && classType.Assembly == interfaceType.Assembly && IsInterfaceOnlyOnClass(classType, interfaceType)
@jeremybeavon
jeremybeavon / MethodInfoToDelegateExtensions.cs
Created December 22, 2015 02:07
Convert method to delegate
using System;
using System.Collections.Concurrent;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
public static class MethodInfoToDelegateExtensions
{
private static readonly ConcurrentDictionary<MethodInfo, object> cachedDelegates = new ConcurrentDictionary<MethodInfo, object>();