Browse Source

added dotnet build system

c6burns 6 years ago
parent
commit
f37acb46d2

+ 43 - 0
Directory.Build.props

@@ -0,0 +1,43 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    
+    <PropertyGroup>
+        <SlnDir>$(MSBuildThisFileDirectory)</SlnDir>
+        <SlnDir Condition="!HasTrailingSlash('$(SlnDir)')">$(SlnDir)\</SlnDir>
+        
+        <CsDir>$(SlnDir)MSBuild\</CsDir>
+        
+        <SdkDir>$(MSBuildExtensionsPath)</SdkDir>
+        <SdkDir Condition="!HasTrailingSlash('$(SdkDir)')">$(SdkDir)\</SdkDir>
+    </PropertyGroup>
+
+    <PropertyGroup>
+        <OSPlatformWindows Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Windows)))' == 'true'">true</OSPlatformWindows>
+        <OSPlatformLinux Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true'">true</OSPlatformLinux>
+        <OSPlatformOSX Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))' == 'true'">true</OSPlatformOSX>
+    </PropertyGroup>
+
+    <PropertyGroup Condition="'$(OSPlatformWindows)' == 'true'">
+        <DefineConstants>$(DefineConstants);EN_PLATFORM_WINDOWS;EN_SOCK_API_WINSOCK</DefineConstants>
+    </PropertyGroup>
+
+    <PropertyGroup Condition="'$(OSPlatformLinux)' == 'true'">
+        <DefineConstants>$(DefineConstants);EN_PLATFORM_LINUX;EN_SOCK_API_POSIX</DefineConstants>
+    </PropertyGroup>
+
+    <PropertyGroup Condition="'$(OSPlatformOSX)' == 'true'">
+        <DefineConstants>$(DefineConstants);EN_PLATFORM_OSX;EN_SOCK_API_POSIX</DefineConstants>
+    </PropertyGroup>
+
+    <PropertyGroup>
+        <PluginDir>$(SlnDir)PluginOutput</PluginDir>
+        <PluginArchDir>x86_64\</PluginArchDir>
+        <PluginBaseName>enet</PluginBaseName>
+        
+        <PluginPrefix Condition="'$(OSPlatformLinux)' == 'true'">lib</PluginPrefix>
+
+        <PluginExt Condition="'$(PluginExt)' == ''">dll</PluginExt>
+        <PluginExt Condition="'$(OSPlatformLinux)' == 'true'">so</PluginExt>
+        <PluginExt Condition="'$(OSPlatformOSX)' == 'true'">dylib</PluginExt>
+    </PropertyGroup>
+    
+</Project>

+ 0 - 0
Directory.Build.rsp


+ 56 - 0
ENet-CSharp.sln

@@ -0,0 +1,56 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.26124.0
+MinimumVisualStudioVersion = 15.0.26124.0
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MSBuild", "MSBuild", "{3F0B29E5-FF51-4A21-871E-8F70E34C7CBF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CMake", "MSBuild\CMake\CMake.csproj", "{C47E0036-4655-4448-8F29-FEBE850E5A08}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Source", "Source", "{62667EDC-E795-4351-80C6-324911DB7B69}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ENet-CSharp", "Source\Managed\ENet-CSharp.csproj", "{3DCD3704-5D77-4CDF-A287-4E8FC5CD33B4}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|Any CPU = Release|Any CPU
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{C47E0036-4655-4448-8F29-FEBE850E5A08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C47E0036-4655-4448-8F29-FEBE850E5A08}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C47E0036-4655-4448-8F29-FEBE850E5A08}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{C47E0036-4655-4448-8F29-FEBE850E5A08}.Debug|x64.Build.0 = Debug|Any CPU
+		{C47E0036-4655-4448-8F29-FEBE850E5A08}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{C47E0036-4655-4448-8F29-FEBE850E5A08}.Debug|x86.Build.0 = Debug|Any CPU
+		{C47E0036-4655-4448-8F29-FEBE850E5A08}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{C47E0036-4655-4448-8F29-FEBE850E5A08}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C47E0036-4655-4448-8F29-FEBE850E5A08}.Release|x64.ActiveCfg = Release|Any CPU
+		{C47E0036-4655-4448-8F29-FEBE850E5A08}.Release|x64.Build.0 = Release|Any CPU
+		{C47E0036-4655-4448-8F29-FEBE850E5A08}.Release|x86.ActiveCfg = Release|Any CPU
+		{C47E0036-4655-4448-8F29-FEBE850E5A08}.Release|x86.Build.0 = Release|Any CPU
+		{3DCD3704-5D77-4CDF-A287-4E8FC5CD33B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3DCD3704-5D77-4CDF-A287-4E8FC5CD33B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3DCD3704-5D77-4CDF-A287-4E8FC5CD33B4}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{3DCD3704-5D77-4CDF-A287-4E8FC5CD33B4}.Debug|x64.Build.0 = Debug|Any CPU
+		{3DCD3704-5D77-4CDF-A287-4E8FC5CD33B4}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{3DCD3704-5D77-4CDF-A287-4E8FC5CD33B4}.Debug|x86.Build.0 = Debug|Any CPU
+		{3DCD3704-5D77-4CDF-A287-4E8FC5CD33B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3DCD3704-5D77-4CDF-A287-4E8FC5CD33B4}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3DCD3704-5D77-4CDF-A287-4E8FC5CD33B4}.Release|x64.ActiveCfg = Release|Any CPU
+		{3DCD3704-5D77-4CDF-A287-4E8FC5CD33B4}.Release|x64.Build.0 = Release|Any CPU
+		{3DCD3704-5D77-4CDF-A287-4E8FC5CD33B4}.Release|x86.ActiveCfg = Release|Any CPU
+		{3DCD3704-5D77-4CDF-A287-4E8FC5CD33B4}.Release|x86.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{C47E0036-4655-4448-8F29-FEBE850E5A08} = {3F0B29E5-FF51-4A21-871E-8F70E34C7CBF}
+		{3DCD3704-5D77-4CDF-A287-4E8FC5CD33B4} = {62667EDC-E795-4351-80C6-324911DB7B69}
+	EndGlobalSection
+EndGlobal

+ 64 - 0
MSBuild/CMake/CMake.Build.targets

@@ -0,0 +1,64 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+    <PropertyGroup>
+        <CMakeProjName>enet</CMakeProjName>
+        <CMakeSourceDir>$(SlnDir)Source\Native</CMakeSourceDir>
+        <CMakeBinaryDir>$(SlnDir)build_cmake_enet</CMakeBinaryDir>
+        <CMakeBuildType Condition="'$(CMakeBuildType)' == ''">Debug</CMakeBuildType>
+        <CMakeBuildType Condition="'$(Configuration)' == 'Release'">Release</CMakeBuildType>
+        <CMakeOpts>$(CMakeOpts) -DENET_SHARED=ON</CMakeOpts>
+        <CMakeOpts Condition="'$(CMakeBuildType)' == 'Debug'">$(CMakeOpts) -DENET_DEBUG=ON</CMakeOpts>
+        <CMakeGenerator></CMakeGenerator>
+        <CMakeConfigBuildType></CMakeConfigBuildType>
+    </PropertyGroup>
+
+    <PropertyGroup Condition="'$(OSPlatformWindows)' == 'true'">
+        <CMakeVSArch></CMakeVSArch>
+        <CMakeVSArch Condition="'$(Configuration)' == 'x86'">-A WIN32</CMakeVSArch>
+        <CMakeVSToolset></CMakeVSToolset>
+        <!--<CMakeVSToolset>-T v141</CMakeVSToolset>-->
+        <CMakeGenerator>-G"Visual Studio 15 2017" $(CMakeVSArch) $(CMakeVSToolset)</CMakeGenerator>
+    </PropertyGroup>
+    <PropertyGroup Condition="'$(OSPlatformWindows)' != 'true'">
+        <CMakeConfigBuildType>-DCMAKE_BUILD_TYPE=$(CMakeBuildType)</CMakeConfigBuildType>
+    </PropertyGroup>
+
+    <Target Name="CMakeBuildClean" BeforeTargets="Clean">
+        <Message Text="CMake -- cleaning project: $(CMakeProjName)" Importance="high" />
+        <RemoveDir Directories="$(CMakeBinaryDir)"/>
+        <MakeDir Directories="$(CMakeBinaryDir)"/>
+        <OnError ExecuteTargets="CMakeCleanFailed" />
+    </Target>
+
+    <Target Name="CMakeConfigTarget" BeforeTargets="Build;VSTest">
+        <Message Text="CMake -- configuring $(CMakeBuildType) $(Platform): $(CMakeProjName)" Importance="high" />
+        <MakeDir Directories="$(CMakeBinaryDir)" />
+        <Exec Command="cmake $(CMakeGenerator) $(CMakeConfigBuildType) $(CMakeOpts) $(CMakeSourceDir)" WorkingDirectory="$(CMakeBinaryDir)" StandardOutputImportance="low" StandardErrorImportance="high" />
+        <OnError ExecuteTargets="CMakeBuildFailed" />
+    </Target>
+
+    <Target Name="CMakeBuildTarget" BeforeTargets="Build;VSTest">
+        <Message Text="CMake -- building project: $(CMakeProjName)" Importance="high" />
+        <Exec Command="cmake --build . --config $(CMakeBuildType)" WorkingDirectory="$(CMakeBinaryDir)" StandardOutputImportance="low" StandardErrorImportance="high" />
+        <OnError ExecuteTargets="CMakeBuildFailed" />
+    </Target>
+
+    <Target Name="CMakeBuildSuccess" BeforeTargets="Build;VSTest">
+        <Message Text="CMake -- build succeeded: $(CMakeProjName)" Importance="high" />
+    </Target>
+
+    <Target Name="CMakeCleanFailed">
+        <Warning Text="CMake -- the most common cause of CMake clean errors is file locking (eg. windows console in the build dir)" />
+        <Warning Text="CMake -- please unlock or reboot and try cleaning again before filing an issue on github:" />
+        <Warning Text="CMake -- https://github.com/cburns/socklynx" />
+        <Error Text="CMake -- build failed: $(CMakeProjName)" />
+    </Target>
+
+    <Target Name="CMakeBuildFailed">
+        <Warning Text="CMake -- the most common cause of CMake build errors is changing config without cleaning" />
+        <Warning Text="CMake -- please try cleaning and building again before filing an issue on github:" />
+        <Warning Text="CMake -- https://github.com/cburns/socklynx" />
+        <Error Text="CMake -- build failed: $(CMakeProjName)" />
+    </Target>
+
+</Project>

+ 16 - 0
MSBuild/CMake/CMake.Copy.targets

@@ -0,0 +1,16 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+    <Target Name="CMakeContentCopy" AfterTargets="Build">
+        <PropertyGroup>
+            <PluginFullPath>$(PluginDir)$(PluginArchDir)$(PluginPrefix)$(PluginBaseName).$(PluginExt)</PluginFullPath>
+        </PropertyGroup>
+
+        <ItemGroup>
+          <Content Condition="Exists('$(PluginFullPath)')" Include="$(PluginFullPath)">
+            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+          </Content>
+        </ItemGroup>
+        <!--<Copy SourceFiles="$(PluginFullPath)" DestinationFolder="$(OutputPath)" SkipUnchangedFiles="true" />-->
+    </Target>
+
+</Project>

+ 19 - 0
MSBuild/CMake/CMake.csproj

@@ -0,0 +1,19 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+    <PropertyGroup>
+        <TargetFramework>netcoreapp2.1</TargetFramework>
+        <EnableDefaultCompileItems>false</EnableDefaultCompileItems>
+        <EnableDefaultNoneItems>false</EnableDefaultNoneItems>
+        <EnableDefaultItems>false</EnableDefaultItems>
+        <BuildInParallel Condition="'$(BuildInParallel)' == ''">false</BuildInParallel>
+    </PropertyGroup>
+
+    <Import Project="$(CsDir)Common\BannerTask.targets" Condition="'$(BuildingInsideVisualStudio)' != 'true'" />
+
+    <Target Name="ConsoleBanner" BeforeTargets="Build" Condition="'$(BuildingInsideVisualStudio)' != 'true'">
+        <BannerTask TextFile="$(CsDir)Common\Banner.txt" />
+    </Target>
+
+    <Import Project="CMake.Build.targets" />
+
+</Project>

+ 203 - 0
MSBuild/Common/Banner.txt

@@ -0,0 +1,203 @@
+                                                              ..---..._
+                                                        ..--""         "-.
+                                                   ..-"""                 ".
+                                               ..-""                        "
+                                            .-"
+                                         .-"      ... -_
+                                     .="   _..-" F   .-"-.....___-..
+                                     "L_ _-'    ."  j"  .-":   /"-._ "-
+                                        "      :  ."  j"  :   :    |"" ".
+                                  ......---------"""""""""""-:_     |   |\
+                        ...---""""                             -.   f   | "
+                ...---""       . ..----""""""""..                ".-... f  ".
+         ..---"""       ..---""""""""-..--"""""""""^^::            |. "-.    .
+     .--"           .mm::::::::::::::::::::::::::...  ""L           |x   ".
+   -"             mm;;;;;;;;;;XXXXXXXXXXXXX:::::::::::.. |           |x.   -
+ xF        -._ .mF;;;;;;XXXXXXXXXXXXXXXXXXXXXXXXXX:::::::|            |X:.  "
+j         |   j;;;;;XXX#############################::::::|            XX::::
+|          |.#;::XXX##################################::::|            |XX:::
+|          j#::XXX#######################################::             XXX::
+|         .#:XXX###########################################             |XX::
+|         #XXX##############################XX############Fl             XXX:
+|        .XXX###################XX#######X##XXX###########Fl             lXX:
+ |       #XX##################XXX######XXXXXXX###########F j             lXXX
+ |       #X#########X#X#####XXX#######XXXXXX#######XXX##F  jl            XXXX
+ |       #X#######XX#"  V###XX#' ####XXXXXX##F"T##XXXXXX.  V   /  .    .#XXXX
+  |       #########"     V#XX#'  "####XXXX##.---.##XXXXXX.    /  /  / .##XXXX
+  |       "######X' .--"" "V##L   #####XXX#"      "###XXXX. ."  /  / .###XXXX
+  |         #####X "   .m###m##L   ####XX#      m###m"###XX#   /  / .#####XXX
+   |         "###X   .mF""   "y     #####     mX"   "Y#"^####X   / .######XXX
+   |           "T#   #"        #     ####    X"       "F""###XX"###########XX
+   |             L  d"     dXX  xm   "^##L mx     dXX  YL-"##XX"S""##########
+    |            xL J     Xd%    T      ""  T    XdX    L. "##XS.f |#########
+    |             BL      X## X                  X## X      T#SS"  |#########
+    |              #L     X%##X                  X%##X|     j#SSS /##########
+     |              #L  ._ TXXX-"           "-._  XXXF.-    ###SS\###########
+     |              ##   """""                  """"""      ##DS.\###########
+     |              TF                                      ##BBS.T#########F
+      |             #L           ---                        ###BBS.T########'
+      |            '##            ""                     jL|###BSSS.T#######
+       |          '####             ______              .:#|##WWBBBSS.T####F
+      J L        '######.            \___/            _c::#|###WWWBSSS|####
+     J ;;       '########m            \_/            c:::'#|###WWWBBSS.T##"
+    J ;;;L      :########.:m.          _          _cf:::'.L|####WWWWSSS|#"
+  .J ;;;;B      ########B....:m..             _,c%%%:::'...L####WWWBBSSj
+ x  ;;;;dB      #######BB.......##m...___..cc%%%%%::::'....|#####WWBBDS.|
+" ;;;;;ABB#     #######BB........##j%%%%%%%%%%%%%%:::'..... #####WWWWDDS|
+.;;;;;dBBB#     #######BB.........%%%%%%%%%%%%%%%:::'...   j####WWWWWBDF
+;;;;;BBB####    ######BBB.........%%%%%%%%%%%%%%:::'..     #####WWWWWWS
+;;;;dBBB####    ######BBB..........^%%%%%%%%%%:::"         #####WWWWWWB
+;;;:BBB######   X#####BBB"..........."^YYYYY::"            #####WWWWWWW
+;;.BB#########  X######BBB........:''                      #####WWWWWWW
+;;BB##########L X######BBB.......mmmm..                 ..x#####WWWWWWB.
+;dBB########### X#######BB.....        "-._           x""  #####WWWWWWBL
+;BBB###########L X######BB...              "-              ######WWWWBBBL
+BBB#############. ######BBB.                                #####WWWWBBBB
+BBB############## X#####BBB                                 #####WWWWWBBB
+BBB############### T#####BB                                  #####WWWBBB     :
+BB################# T###BBP                                   #####WWBB"    .#
+BB##################..W##P                                      ###BBB"    .##
+BB###################..l                                         "WW"      ###
+BB####################j ___                                        " l    j###
+BBB##################J_-   """-..             ':::'   .-""""""""""-.  l  .####
+BBB######B##########J########    "-.           ::'  -" ..mmm####mm.."-.< #####
+MCL-5/7/88 BBB#####J############    "-_        :|  " .###############mmLlR####
+BBBBBBBBBBBBBBB###/         #######    -.     .:| ".#####F^^^P^^"""^^^Y#lT####
+BBBBBBBBBBBBBBBBBj|####mm        ######xx-...:::|" ###f      .....      "#T###
+BBBBBBBBBBBBBBBBjj##########mm..           ":::."j##F  .mm#########mmm.. Yj###
+BBBBBBBBBBBBBBBB|^WWWSRR############mmmmm xx """mjF.mm####################j###
+BBBBBBBBBBBBBBBB|                      ######mmmmmm#######################j###
+BBBBBBBBBBBBBBBBY#m...   ..mmm##########PPPPP#####m..                    lj###
+BBBBBBBBBBBBBBBBB2##############^^""     ..umF^^^Tx ^##mmmm........mmmmmmlj###
+BBBBBBBBBBBBBBBBBJT######^^^""     .mm##PPPF"...."m.  "^^###############lj####
+BBBBBBBBBBBBBBBBB##^L         .mmm###PPP............"m..    """"^^^^^"" lj####
+BBBBBBBBBBBBBBBB#####Y#mmx#########P.................."^:muuuummmmmm###^.#####
+BBBBBBBBBBBBBBBB#####::Y##mPPPPF^".......|.............. ""^^######^^"...#####
+BBBBBBBBBBBBBB########..................F............      \     ........#####
+BBBBBBBBBBBBB#########.................|..........          :       ....l#####
+BBBBBBBBBBBB###########...............F.........             \        ..######
+BBBBBBBBBBB#############.............|........                :         dA####
+BBBBBBBBBB##############.....................                           kM####
+BBBBBBBBB################..................                             k#####
+BBBBBBB##################................                               k#####
+BBBBB#####################.............                                 t#####
+BB########################............                                  "E####
+B########################F............                           .       "####
+#########################............'      |                    ..       "L##
+########################F............                           ...        "L#
+#######################F............'                           .....       "#
+######################F.............                           .......       "
+#####################$..............                         .........
+#####################lmmm.............                      ...........   ..m#
+####################j########mmmm.............            ......mmmmmm########
+###################j###::::;:::::########mmmmmmm##############################
+##################j:::::::;:::::::;;::##############################^^^""""
+##################.mm:::mmm######mmmm:::' ^^^^^^""#######^^""""
+#################F...^m::;::################mmm  .mm"""
+#################.......m;::::::::::::#########^"
+################F.........###mmm::::;' .##^"""
+ ##############F...........:#######m.m#"
+   ############..............':####
+     #########F............mm^""
+       #######..........m^""
+          ####.......%^"
+             #.....x"
+             |.x""
+            .-"
+          .-
+        .-
+      .-
+     -
+   -"
+ -"
+"
+                                                                             x
+                                                                           xx
+                                                                         xx
+                                                                     xxx"
+                                                                 xxx"
+                                                           .xxxx"
+                                                   ___xxx""
+                                             .xxxx""....F
+                """"mmxxxxx          ___xxx^^^..........'
+                   .xx^^^^YYYY###xxx^^.................|
+                .xx^"        #######x..................|
+             .xx"          ###########mx..............f
+           .x^            ##############xx............|
+          j"             ##############    x..........;
+.........#              ############       #x.........|
+x.......j"              ##########       ####x.......f
+ xxx....#..            ########        #######x......|
+   xxxx.#....         #######        ##########x.....|
+      xxx......       #####         #########   x....|
+         xxx......    ###          #######      #m...|
+           xxx......  ##           ######      ####..|
+             xxx......#.          #####       ######m|
+               xxxx.......        ###        #######Fx
+                   xxx......      #         j#####    m
+                      xx......              ####      Jxm
+                       xxx......           ####      j###Km
+                          xxx.....         ###      j####F  m
+                             xx......       #       ###F    .m
+                               xxx ....            j##F    .###m
+                               m..xx.....          ##F    j#####K^mm.
+                                m...xx......       ##     #####F    ####mm
+                                m .....x......     F     j####F    ########
+                                 m  ......x.....         ###F    J##########
+                                 "m  ........x....      .#F     #########^^|
+                                  "......mmF^^^x....    ##     ######      |
+                                   lL..jF        x.... .F      ####       |
+                                   lTLJF           x....      ####        |
+                                   l::|.            "....    j###       ##
+                                    l....            L....   ###F     x##
+                                     l....       ..m##L...   ##F     j###
+                                     l:...        #####L...  #F     j####
+                                      l....    ####     ...        #####
+                                      "....              ...       ####F |
+                                       l....              ...     j###F  |
+                                        #...               ....   ###F    |
+                                        "#..              .jL.... ##F     |
+                                         ##.            .m###L....#F      |
+                                         "##        ..mm###### ....       |
+                                          |                   |...        |
+                                          k                    |...       |
+                                          l                    |...       k
+                                           k                 .m#L...     Jk
+                                           ##            ..mm####L...     k
+                                           ###         d########' L....   |
+                                           l                   |   "-.__-"
+                                           l                   |
+                                           l                  j#
+                                           :                 j##
+                                            k               j##'
+                                            l            .m###k
+                                            l           ###^^"|
+                                            |                 |
+                                            j               .##
+                                            |              ######
+                                            |==          ##### ####
+                                           .k          #####"   ####
+                                           l         #####^     ####
+                                           l       ###         ####'
+                                           !                 m###F
+                                           |               ######
+                                           |           mm##m###'
+                                           |.       m########F
+                                           |.    m#######F" #
+                                           d.   ###        #
+                                          |..             .'
+                                          |..             |
+                                           k..           :
+                                           \...          F
+                                            |...        #d
+                                            |...       ###
+                                             L...     ####.
+                                             |...    j### |
+  ___                                         L...   ###  |
+ |_ _|__ _ _ __   ___  _ __ __ _ _ __   ___ ___ ..  j##    k
+  | |/ _` | '_ \ / _ \| '__/ _` | '_ \ / __/ _ \... ##     |
+  | | (_| | | | | (_) | | | (_| | | | | (_|  __/ \...      .
+ |___\__, |_| |_|\___/|_|  \__,_|_| |_|\___\___|   "^-____-
+     |___/ Mothers, hide your daughters!
+------------------------------------------------------------------------------
+

+ 54 - 0
MSBuild/Common/BannerTask.cs

@@ -0,0 +1,54 @@
+using System;
+using System.IO;
+using System.Threading;
+using Microsoft.Build.Framework;
+using Microsoft.Build.Utilities;
+
+public class BannerTask : Task
+{
+    ITaskItem _textFileItem;
+    FileStream _fileStream;
+    StreamReader _filein;
+    StreamWriter _stdout;
+    bool _taskSucceeded;
+    int _width;
+
+    [Required]
+    public ITaskItem TextFile { get; set; }
+
+    public override bool Execute()
+    {
+        try
+        {
+            _textFileItem = TextFile;
+            if (_textFileItem == null || _textFileItem.ItemSpec.Length <= 0)
+            {
+                throw new FileNotFoundException("Invalid TaskItem passed to BannerTask::TextFile");
+            }
+
+            _taskSucceeded = true;
+            using (_fileStream = new FileStream(_textFileItem.ItemSpec, FileMode.Open, FileAccess.Read))
+            using (_filein = new StreamReader(_fileStream))
+            using (_stdout = new StreamWriter(Console.OpenStandardOutput()))
+            {
+                _stdout.AutoFlush = true;
+                _width = Console.BufferWidth;
+                if (_width >= 80)
+                {
+                    while (_filein.Peek() > 0)
+                    {
+                        _stdout.WriteLine(_filein.ReadLine());
+                        Thread.Sleep(5);
+                    }
+                }
+            }
+        }
+        catch (Exception e)
+        {
+            Log.LogError("SockLynx Build Error: " + e.Message);
+            _taskSucceeded = false;
+        }
+
+        return _taskSucceeded;
+    }
+}

+ 12 - 0
MSBuild/Common/BannerTask.targets

@@ -0,0 +1,12 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+    <UsingTask TaskName="BannerTask" TaskFactory="RoslynCodeTaskFactory" AssemblyFile="$(SdkDir)Microsoft.Build.Tasks.Core.dll">
+        <ParameterGroup>
+            <TextFile ParameterType="Microsoft.Build.Framework.ITaskItem" Required="true" />
+        </ParameterGroup>
+        <Task>
+            <Reference Include="$(SdkDir)Microsoft.Build.Framework.dll" />
+            <Reference Include="$(SdkDir)Microsoft.Build.Utilities.Core.dll" />
+            <Code Type="Class" Language="cs" Source="$(CsDir)Common/BannerTask.cs" />
+        </Task>
+    </UsingTask>
+</Project>