Skip to content

Instantly share code, notes, and snippets.

@smailliwcs
smailliwcs / FindFilesInList.cs
Created September 22, 2020 15:25
MSBuild task: FindFilesInList
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
using System.Collections.Generic;
using System.IO;
using System.Linq;
public class FindFilesInList : Task
{
[Required]
public ITaskItem[] Items { get; set; }
@smailliwcs
smailliwcs / common.vbs
Created September 22, 2020 15:25
AccessIO
Option Explicit
' AcCloseSave
Const acSavePrompt = 0
Const acSaveYes = 1
Const acSaveNo = 2
' AcObjectType
Const acDefault = -1
Const acTable = 0
@smailliwcs
smailliwcs / QualifiedTypeMap.cs
Created September 22, 2020 15:25
Mapping qualified column names in Dapper
using Dapper;
using System;
using System.Reflection;
public class QualifiedTypeMap : SqlMapper.ITypeMap
{
private static string Unqualify(string columnName)
{
return columnName.Substring(columnName.LastIndexOf('.') + 1);
}
@smailliwcs
smailliwcs / IOExtensions.cs
Created September 22, 2020 15:25
Specifying extensions for temporary files
using System;
using System.IO;
public static class IOExtensions
{
public static FileInfo GetTemporaryFile(string extension = null)
{
string path = Path.GetTempPath();
FileInfo file;
do
@smailliwcs
smailliwcs / NotEmptyAttribute.cs
Created September 22, 2020 15:25
Nonempty collection validation
using System;
using System.Collections;
using System.ComponentModel.DataAnnotations;
[AttributeUsage(AttributeTargets.Property)]
public sealed class NotEmptyAttribute : RequiredAttribute
{
public override bool IsValid(object value)
{
ICollection valueCollection = value as ICollection;
@smailliwcs
smailliwcs / HtmlHelperExtensions.cs
Created September 22, 2020 15:25
Singly rendered content in Razor
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Mvc;
using System.Web.WebPages;
public static class HtmlHelperExtensions
{
public static HtmlString Once(this HtmlHelper @this, Func<dynamic, HelperResult> template)
{
@smailliwcs
smailliwcs / ControllerBase.cs
Created September 22, 2020 15:25
Programmatic view rendering
using System.IO;
using System.Web.Mvc;
public class ControllerBase : Controller
{
protected string RenderResult(ViewEngineResult result, object model)
{
ViewData.Model = model;
using (StringWriter writer = new StringWriter())
{
@smailliwcs
smailliwcs / HtmlTextWriter.cs
Created September 22, 2020 15:25
Handling CSS classes with HtmlTextWriter
using System.Collections.Generic;
using System.IO;
using System.Web.UI;
public class HtmlTextWriter : System.Web.UI.HtmlTextWriter
{
private ICollection<string> cssClasses;
public HtmlTextWriter(TextWriter writer)
: base(writer)
@smailliwcs
smailliwcs / LaterThanAttribute.cs
Created September 22, 2020 15:25
Relative date validation
using System;
using System.ComponentModel.DataAnnotations;
using System.Reflection;
[AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
public sealed class LaterThanAttribute : ValidationAttribute
{
public override bool RequiresValidationContext
{
get { return true; }
@smailliwcs
smailliwcs / Global.asax.cs
Created September 22, 2020 15:25
Custom property binding
using System;
using System.Web;
using System.Web.Mvc;
public class Global : HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
ModelBinders.Binders.DefaultBinder = new ModelBinderBase();
}