Former-commit-id: 30c7d35bcd8a02856af0c0d2a0e7d740dd4fcf14 Former-commit-id: a29689af60105bc7bd421e027a1e4eece49a6a79 Former-commit-id: 93ec7f3b6ef3abf3b89c2b680ad1be16d613f333pull/17/head
@ -1,6 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<configuration> |
|
||||
<solution> |
|
||||
<add key="disableSourceControlIntegration" value="true" /> |
|
||||
</solution> |
|
||||
</configuration> |
|
||||
@ -1 +0,0 @@ |
|||||
9ca66594f912a1fe7aec510819006fb1a80bc1a9 |
|
||||
@ -1,144 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
|
||||
<PropertyGroup> |
|
||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">$(MSBuildProjectDirectory)\..\</SolutionDir> |
|
||||
|
|
||||
<!-- Enable the restore command to run before builds --> |
|
||||
<RestorePackages Condition=" '$(RestorePackages)' == '' ">false</RestorePackages> |
|
||||
|
|
||||
<!-- Property that enables building a package from a project --> |
|
||||
<BuildPackage Condition=" '$(BuildPackage)' == '' ">false</BuildPackage> |
|
||||
|
|
||||
<!-- Determines if package restore consent is required to restore packages --> |
|
||||
<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">true</RequireRestoreConsent> |
|
||||
|
|
||||
<!-- Download NuGet.exe if it does not already exist --> |
|
||||
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<ItemGroup Condition=" '$(PackageSources)' == '' "> |
|
||||
<!-- Package sources used to restore packages. By default, registered sources under %APPDATA%\NuGet\NuGet.Config will be used --> |
|
||||
<!-- The official NuGet package source (https://www.nuget.org/api/v2/) will be excluded if package sources are specified and it does not appear in the list --> |
|
||||
<!-- |
|
||||
<PackageSource Include="https://www.nuget.org/api/v2/" /> |
|
||||
<PackageSource Include="https://my-nuget-source/nuget/" /> |
|
||||
--> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<PropertyGroup Condition=" '$(OS)' == 'Windows_NT'"> |
|
||||
<!-- Windows specific commands --> |
|
||||
<NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), ".nuget"))</NuGetToolsPath> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<PropertyGroup Condition=" '$(OS)' != 'Windows_NT'"> |
|
||||
<!-- We need to launch nuget.exe with the mono command if we're not on windows --> |
|
||||
<NuGetToolsPath>$(SolutionDir).nuget</NuGetToolsPath> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<PropertyGroup> |
|
||||
<PackagesProjectConfig Condition=" '$(OS)' == 'Windows_NT'">$(MSBuildProjectDirectory)\packages.$(MSBuildProjectName.Replace(' ', '_')).config</PackagesProjectConfig> |
|
||||
<PackagesProjectConfig Condition=" '$(OS)' != 'Windows_NT'">$(MSBuildProjectDirectory)\packages.$(MSBuildProjectName).config</PackagesProjectConfig> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<PropertyGroup> |
|
||||
<PackagesConfig Condition="Exists('$(MSBuildProjectDirectory)\packages.config')">$(MSBuildProjectDirectory)\packages.config</PackagesConfig> |
|
||||
<PackagesConfig Condition="Exists('$(PackagesProjectConfig)')">$(PackagesProjectConfig)</PackagesConfig> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<PropertyGroup> |
|
||||
<!-- NuGet command --> |
|
||||
<NuGetExePath Condition=" '$(NuGetExePath)' == '' ">$(NuGetToolsPath)\NuGet.exe</NuGetExePath> |
|
||||
<PackageSources Condition=" $(PackageSources) == '' ">@(PackageSource)</PackageSources> |
|
||||
|
|
||||
<NuGetCommand Condition=" '$(OS)' == 'Windows_NT'">"$(NuGetExePath)"</NuGetCommand> |
|
||||
<NuGetCommand Condition=" '$(OS)' != 'Windows_NT' ">mono --runtime=v4.0.30319 "$(NuGetExePath)"</NuGetCommand> |
|
||||
|
|
||||
<PackageOutputDir Condition="$(PackageOutputDir) == ''">$(TargetDir.Trim('\\'))</PackageOutputDir> |
|
||||
|
|
||||
<RequireConsentSwitch Condition=" $(RequireRestoreConsent) == 'true' ">-RequireConsent</RequireConsentSwitch> |
|
||||
<NonInteractiveSwitch Condition=" '$(VisualStudioVersion)' != '' AND '$(OS)' == 'Windows_NT' ">-NonInteractive</NonInteractiveSwitch> |
|
||||
|
|
||||
<PaddedSolutionDir Condition=" '$(OS)' == 'Windows_NT'">"$(SolutionDir) "</PaddedSolutionDir> |
|
||||
<PaddedSolutionDir Condition=" '$(OS)' != 'Windows_NT' ">"$(SolutionDir)"</PaddedSolutionDir> |
|
||||
|
|
||||
<!-- Commands --> |
|
||||
<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir)</RestoreCommand> |
|
||||
<BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols</BuildCommand> |
|
||||
|
|
||||
<!-- We need to ensure packages are restored prior to assembly resolve --> |
|
||||
<BuildDependsOn Condition="$(RestorePackages) == 'true'"> |
|
||||
RestorePackages; |
|
||||
$(BuildDependsOn); |
|
||||
</BuildDependsOn> |
|
||||
|
|
||||
<!-- Make the build depend on restore packages --> |
|
||||
<BuildDependsOn Condition="$(BuildPackage) == 'true'"> |
|
||||
$(BuildDependsOn); |
|
||||
BuildPackage; |
|
||||
</BuildDependsOn> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<Target Name="CheckPrerequisites"> |
|
||||
<!-- Raise an error if we're unable to locate nuget.exe --> |
|
||||
<Error Condition="'$(DownloadNuGetExe)' != 'true' AND !Exists('$(NuGetExePath)')" Text="Unable to locate '$(NuGetExePath)'" /> |
|
||||
<!-- |
|
||||
Take advantage of MsBuild's build dependency tracking to make sure that we only ever download nuget.exe once. |
|
||||
This effectively acts as a lock that makes sure that the download operation will only happen once and all |
|
||||
parallel builds will have to wait for it to complete. |
|
||||
--> |
|
||||
<MsBuild Targets="_DownloadNuGet" Projects="$(MSBuildThisFileFullPath)" Properties="Configuration=NOT_IMPORTANT;DownloadNuGetExe=$(DownloadNuGetExe)" /> |
|
||||
</Target> |
|
||||
|
|
||||
<Target Name="_DownloadNuGet"> |
|
||||
<DownloadNuGet OutputFilename="$(NuGetExePath)" Condition=" '$(DownloadNuGetExe)' == 'true' AND !Exists('$(NuGetExePath)')" /> |
|
||||
</Target> |
|
||||
|
|
||||
<Target Name="RestorePackages" DependsOnTargets="CheckPrerequisites"> |
|
||||
<Exec Command="$(RestoreCommand)" |
|
||||
Condition="'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')" /> |
|
||||
|
|
||||
<Exec Command="$(RestoreCommand)" |
|
||||
LogStandardErrorAsError="true" |
|
||||
Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')" /> |
|
||||
</Target> |
|
||||
|
|
||||
<Target Name="BuildPackage" DependsOnTargets="CheckPrerequisites"> |
|
||||
<Exec Command="$(BuildCommand)" |
|
||||
Condition=" '$(OS)' != 'Windows_NT' " /> |
|
||||
|
|
||||
<Exec Command="$(BuildCommand)" |
|
||||
LogStandardErrorAsError="true" |
|
||||
Condition=" '$(OS)' == 'Windows_NT' " /> |
|
||||
</Target> |
|
||||
|
|
||||
<UsingTask TaskName="DownloadNuGet" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"> |
|
||||
<ParameterGroup> |
|
||||
<OutputFilename ParameterType="System.String" Required="true" /> |
|
||||
</ParameterGroup> |
|
||||
<Task> |
|
||||
<Reference Include="System.Core" /> |
|
||||
<Using Namespace="System" /> |
|
||||
<Using Namespace="System.IO" /> |
|
||||
<Using Namespace="System.Net" /> |
|
||||
<Using Namespace="Microsoft.Build.Framework" /> |
|
||||
<Using Namespace="Microsoft.Build.Utilities" /> |
|
||||
<Code Type="Fragment" Language="cs"> |
|
||||
<![CDATA[ |
|
||||
try { |
|
||||
OutputFilename = Path.GetFullPath(OutputFilename); |
|
||||
|
|
||||
Log.LogMessage("Downloading latest version of NuGet.exe..."); |
|
||||
WebClient webClient = new WebClient(); |
|
||||
webClient.DownloadFile("https://www.nuget.org/nuget.exe", OutputFilename); |
|
||||
|
|
||||
return true; |
|
||||
} |
|
||||
catch (Exception ex) { |
|
||||
Log.LogErrorFromException(ex); |
|
||||
return false; |
|
||||
} |
|
||||
]]> |
|
||||
</Code> |
|
||||
</Task> |
|
||||
</UsingTask> |
|
||||
</Project> |
|
||||
@ -1,4 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<packages> |
|
||||
<package id="xunit.runner.console" version="2.0.0" /> |
|
||||
</packages> |
|
||||
@ -1,49 +0,0 @@ |
|||||
*.doc diff=astextplain |
|
||||
*.DOC diff=astextplain |
|
||||
*.docx diff=astextplain |
|
||||
*.DOCX diff=astextplain |
|
||||
*.dot diff=astextplain |
|
||||
*.DOT diff=astextplain |
|
||||
*.pdf diff=astextplain |
|
||||
*.PDF diff=astextplain |
|
||||
*.rtf diff=astextplain |
|
||||
*.RTF diff=astextplain |
|
||||
|
|
||||
*.jpg binary |
|
||||
*.png binary |
|
||||
*.gif binary |
|
||||
|
|
||||
*.cs text=auto diff=csharp |
|
||||
*.vb text=auto |
|
||||
*.c text=auto |
|
||||
*.cpp text=auto |
|
||||
*.cxx text=auto |
|
||||
*.h text=auto |
|
||||
*.hxx text=auto |
|
||||
*.py text=auto |
|
||||
*.rb text=auto |
|
||||
*.java text=auto |
|
||||
*.html text=auto |
|
||||
*.htm text=auto |
|
||||
*.css text=auto |
|
||||
*.scss text=auto |
|
||||
*.sass text=auto |
|
||||
*.less text=auto |
|
||||
*.js text=auto |
|
||||
*.lisp text=auto |
|
||||
*.clj text=auto |
|
||||
*.sql text=auto |
|
||||
*.php text=auto |
|
||||
*.lua text=auto |
|
||||
*.m text=auto |
|
||||
*.asm text=auto |
|
||||
*.erl text=auto |
|
||||
*.fs text=auto |
|
||||
*.fsx text=auto |
|
||||
*.hs text=auto |
|
||||
|
|
||||
*.csproj text=auto merge=union |
|
||||
*.vbproj text=auto merge=union |
|
||||
*.fsproj text=auto merge=union |
|
||||
*.dbproj text=auto merge=union |
|
||||
*.sln text=auto eol=crlf merge=union |
|
||||
@ -1,173 +0,0 @@ |
|||||
################# |
|
||||
## Eclipse |
|
||||
################# |
|
||||
|
|
||||
*.pydevproject |
|
||||
.project |
|
||||
.metadata |
|
||||
bin/** |
|
||||
tmp/** |
|
||||
tmp/**/* |
|
||||
*.tmp |
|
||||
*.bak |
|
||||
*.swp |
|
||||
*~.nib |
|
||||
local.properties |
|
||||
.classpath |
|
||||
.settings/ |
|
||||
.loadpath |
|
||||
|
|
||||
# External tool builders |
|
||||
.externalToolBuilders/ |
|
||||
|
|
||||
# Locally stored "Eclipse launch configurations" |
|
||||
*.launch |
|
||||
|
|
||||
# CDT-specific |
|
||||
.cproject |
|
||||
|
|
||||
# PDT-specific |
|
||||
.buildpath |
|
||||
|
|
||||
|
|
||||
################# |
|
||||
## Visual Studio |
|
||||
################# |
|
||||
|
|
||||
## Ignore Visual Studio temporary files, build results, and |
|
||||
## files generated by popular Visual Studio add-ons. |
|
||||
|
|
||||
# User-specific files |
|
||||
*.suo |
|
||||
*.user |
|
||||
*.sln.docstates |
|
||||
|
|
||||
# Build results |
|
||||
**/[Dd]ebug/ |
|
||||
**/[Rr]elease/ |
|
||||
*_i.c |
|
||||
*_p.c |
|
||||
*.ilk |
|
||||
*.meta |
|
||||
*.obj |
|
||||
*.pch |
|
||||
*.pdb |
|
||||
*.pgc |
|
||||
*.pgd |
|
||||
*.rsp |
|
||||
*.sbr |
|
||||
*.tlb |
|
||||
*.tli |
|
||||
*.tlh |
|
||||
*.tmp |
|
||||
*.vspscc |
|
||||
.builds |
|
||||
**/*.dotCover |
|
||||
|
|
||||
# Xamarin |
|
||||
*.userprefs |
|
||||
|
|
||||
## TODO: If you have NuGet Package Restore enabled, uncomment this |
|
||||
packages/ |
|
||||
|
|
||||
# Visual C++ cache files |
|
||||
ipch/ |
|
||||
*.aps |
|
||||
*.ncb |
|
||||
*.opensdf |
|
||||
*.sdf |
|
||||
|
|
||||
# Visual Studio profiler |
|
||||
*.psess |
|
||||
*.vsp |
|
||||
|
|
||||
# ReSharper is a .NET coding add-in |
|
||||
_ReSharper* |
|
||||
|
|
||||
# Installshield output folder |
|
||||
[Ee]xpress |
|
||||
|
|
||||
# DocProject is a documentation generator add-in |
|
||||
DocProject/buildhelp/ |
|
||||
DocProject/Help/*.HxT |
|
||||
DocProject/Help/*.HxC |
|
||||
DocProject/Help/*.hhc |
|
||||
DocProject/Help/*.hhk |
|
||||
DocProject/Help/*.hhp |
|
||||
DocProject/Help/Html2 |
|
||||
DocProject/Help/html |
|
||||
|
|
||||
# Click-Once directory |
|
||||
publish |
|
||||
|
|
||||
# Others |
|
||||
[Bb]in |
|
||||
[Oo]bj |
|
||||
sql |
|
||||
TestResults |
|
||||
*.Cache |
|
||||
ClientBin |
|
||||
stylecop.* |
|
||||
~$* |
|
||||
*.dbmdl |
|
||||
Generated_Code #added for RIA/Silverlight projects |
|
||||
|
|
||||
# Backup & report files from converting an old project file to a newer |
|
||||
# Visual Studio version. Backup files are not needed, because we have git ;-) |
|
||||
_UpgradeReport_Files/ |
|
||||
Backup*/ |
|
||||
UpgradeLog*.XML |
|
||||
|
|
||||
|
|
||||
|
|
||||
############ |
|
||||
## Windows |
|
||||
############ |
|
||||
|
|
||||
# Windows image file caches |
|
||||
Thumbs.db |
|
||||
|
|
||||
# Folder config file |
|
||||
Desktop.ini |
|
||||
|
|
||||
|
|
||||
############# |
|
||||
## Python |
|
||||
############# |
|
||||
|
|
||||
*.py[co] |
|
||||
|
|
||||
# Packages |
|
||||
*.egg |
|
||||
*.egg-info |
|
||||
dist |
|
||||
eggs |
|
||||
parts |
|
||||
bin |
|
||||
var |
|
||||
sdist |
|
||||
develop-eggs |
|
||||
.installed.cfg |
|
||||
|
|
||||
# Installer logs |
|
||||
pip-log.txt |
|
||||
|
|
||||
# Unit test / coverage reports |
|
||||
.coverage |
|
||||
.tox |
|
||||
|
|
||||
#Translations |
|
||||
*.mo |
|
||||
|
|
||||
#Mr Developer |
|
||||
.mr.developer.cfg |
|
||||
|
|
||||
# Mac crap |
|
||||
.DS_Store |
|
||||
|
|
||||
build/_BuildOutput/ |
|
||||
build/*.nupkg |
|
||||
build/TestResult.xml |
|
||||
*.db |
|
||||
|
|
||||
_site/ |
|
||||
@ -1,13 +0,0 @@ |
|||||
Copyright 2012 James South |
|
||||
|
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||
you may not use this file except in compliance with the License. |
|
||||
You may obtain a copy of the License at |
|
||||
|
|
||||
http://www.apache.org/licenses/LICENSE-2.0 |
|
||||
|
|
||||
Unless required by applicable law or agreed to in writing, software |
|
||||
distributed under the License is distributed on an "AS IS" BASIS, |
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||
See the License for the specific language governing permissions and |
|
||||
limitations under the License. |
|
||||
@ -1,49 +0,0 @@ |
|||||
# ImageProcessor |
|
||||
|
|
||||
### Build Status |
|
||||
|
|
||||
|Branch | | |
|
||||
|:--------|:--------| |
|
||||
|**Debug**|[](https://ci.appveyor.com/project/JamesSouth/imageprocessor)| |
|
||||
|**Release**|[](https://ci.appveyor.com/project/JamesSouth/imageprocessor/branch/Master)| |
|
||||
|**Coverage Report**|[](https://coveralls.io/r/JimBobSquarePants/ImageProcessor?branch=V2)| |
|
||||
|
|
||||
### Latest Releases |
|
||||
|Library |Version |Downloads | |
|
||||
|:-----------------|:-----------------|:-----------------| |
|
||||
|**ImageProcessor**|[](https://www.nuget.org/packages/ImageProcessor/)|[](https://www.nuget.org/packages/ImageProcessor/)| |
|
||||
|**ImageProcessor.Web**|[](https://www.nuget.org/packages/ImageProcessor.Web/)|[](https://www.nuget.org/packages/ImageProcessor.Web/)| |
|
||||
|
|
||||
[](https://huboard.com/JimBobSquarePants/ImageProcessor/) |
|
||||
[](http://sourcebrowser.io/Browse/JimBobSquarePants/ImageProcessor/) |
|
||||
[](https://gitter.im/JimBobSquarePants/ImageProcessor?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) |
|
||||
|
|
||||
Imageprocessor is a lightweight, extensible library written in C# that allows you to manipulate images on-the-fly using .NET 4.5+ |
|
||||
|
|
||||
It's fast, extensible, easy to use, comes bundled with some great features and is fully open source. |
|
||||
|
|
||||
For full documentation please see [http://imageprocessor.org/](http://imageprocessor.org/) |
|
||||
|
|
||||
## Contributing to ImageProcessor |
|
||||
Contribution is most welcome! I mean, that's what this is all about isn't it? |
|
||||
|
|
||||
Things I would :heart: people to help me out with: |
|
||||
|
|
||||
- Unit tests. I need to get some going for all the regular expressions within the ImageProcessor core plus anywhere else we can think of. If that's your bag please contribute. |
|
||||
- Documentation. Nobody likes doing docs, I've written a lot but my prose is clumsy and verbose. If you think you can make things clearer or you spot any mistakes please submit a pull request (Guide to how the docs work below). |
|
||||
|
|
||||
**Just remember to StyleCop all things! :oncoming_police_car:** |
|
||||
|
|
||||
## RoadMap |
|
||||
I want the next version of ImageProcessor to run on all devices. Sadly it looks like using `System.Drawing` will not allow me to do that so I need to have a look at using an alternative. This is a lot of work so any help that could be offered would be greatly appreciated. |
|
||||
|
|
||||
## Documentation |
|
||||
|
|
||||
ImageProcessor's documentation, included in this repo in the gh-pages branch, is built with [Jekyll](http://jekyllrb.com) and publicly hosted on GitHub Pages at <http://imageprocessor.org>. The docs may also be run locally. |
|
||||
|
|
||||
### Running documentation locally |
|
||||
1. If necessary, [install Jekyll](http://jekyllrb.com/docs/installation) (requires v2.2.x). |
|
||||
- **Windows users:** Read [this unofficial guide](https://github.com/juthilo/run-jekyll-on-windows/) to get Jekyll up and running without problems. |
|
||||
2. From the root `/ImageProcessor` directory, run `jekyll serve` in the command line. |
|
||||
3. Open <http://localhost:4000> in your browser to navigate to your site. |
|
||||
Learn more about using Jekyll by reading its [documentation](http://jekyllrb.com/docs/home/). |
|
||||
@ -1,61 +0,0 @@ |
|||||
# http://www.appveyor.com/docs/appveyor-yml |
|
||||
|
|
||||
#---------------------------------# |
|
||||
# general configuration # |
|
||||
#---------------------------------# |
|
||||
|
|
||||
# branches to build |
|
||||
branches: |
|
||||
|
|
||||
# blacklist |
|
||||
except: |
|
||||
- gh-pages |
|
||||
|
|
||||
#---------------------------------# |
|
||||
# environment configuration # |
|
||||
#---------------------------------# |
|
||||
|
|
||||
# Operating system (build VM template) |
|
||||
os: Windows Server 2012 |
|
||||
|
|
||||
# this is how to allow failing jobs in the matrix |
|
||||
matrix: |
|
||||
fast_finish: true # set this flag to immediately finish build once one of the jobs fails. |
|
||||
|
|
||||
environment: |
|
||||
COVERALLS_REPO_TOKEN: |
|
||||
secure: 1hvfHFO3qtGTcwB+AnCGYsn0az0j9MzAux5hee5CFeyRJ+lWut0LjnyqvsI/5Pfa |
|
||||
|
|
||||
#---------------------------------# |
|
||||
# build configuration # |
|
||||
#---------------------------------# |
|
||||
|
|
||||
# to run your custom scripts instead of automatic MSBuild |
|
||||
before_build: |
|
||||
- ps: Import-Module .\build\psake.psm1 |
|
||||
|
|
||||
build_script: |
|
||||
- ps: Invoke-Psake .\build\build.ps1 -properties @{"BuildNumber"=$env:APPVEYOR_BUILD_NUMBER;"AppVeyor"=$env:APPVEYOR;"CoverallsRepoToken"=$env:COVERALLS_REPO_TOKEN} |
|
||||
|
|
||||
#---------------------------------# |
|
||||
# tests configuration # |
|
||||
#---------------------------------# |
|
||||
|
|
||||
# to disable automatic tests (they're included in the build process) |
|
||||
test: off |
|
||||
|
|
||||
#---------------------------------# |
|
||||
# artifacts configuration # |
|
||||
#---------------------------------# |
|
||||
|
|
||||
artifacts: |
|
||||
- path: build\_BuildOutput\NuGets\*.nupkg |
|
||||
|
|
||||
#---------------------------------# |
|
||||
# global handlers # |
|
||||
#---------------------------------# |
|
||||
|
|
||||
# on successful build |
|
||||
on_success: |
|
||||
- ps: Import-Module .\build\psake.psm1 |
|
||||
- ps: Invoke-Psake .\build\build.ps1 Publish-Nuget -properties @{"NugetApiKey"=$env:APIKEY;"NugetSource"=$env:SOURCE} |
|
||||
@ -1,5 +0,0 @@ |
|||||
@echo off |
|
||||
|
|
||||
powershell "Import-Module %~dp0\psake.psm1 ; Invoke-Psake %~dp0\build.ps1 ; exit $LASTEXITCODE" |
|
||||
|
|
||||
pause |
|
||||
@ -1 +0,0 @@ |
|||||
877afa6ca55ed11d2377363369ea1c39adace2d2 |
|
||||
@ -1,85 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> |
|
||||
<PropertyGroup> |
|
||||
<!-- The configuration and platform will be used to determine which assemblies to include from solution and |
|
||||
project documentation sources --> |
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
|
||||
<SchemaVersion>2.0</SchemaVersion> |
|
||||
<ProjectGuid>{e3928e44-1c57-4c7e-9595-2a5b491455da}</ProjectGuid> |
|
||||
<SHFBSchemaVersion>1.9.9.0</SHFBSchemaVersion> |
|
||||
<!-- AssemblyName, Name, and RootNamespace are not used by SHFB but Visual Studio adds them anyway --> |
|
||||
<AssemblyName>Documentation</AssemblyName> |
|
||||
<RootNamespace>Documentation</RootNamespace> |
|
||||
<Name>Documentation</Name> |
|
||||
<!-- SHFB properties --> |
|
||||
<FrameworkVersion>.NET Framework 4.0</FrameworkVersion> |
|
||||
<OutputPath>_BuildOutput\Help\SandCastle\</OutputPath> |
|
||||
<HtmlHelpName>Documentation</HtmlHelpName> |
|
||||
<Language>en-US</Language> |
|
||||
<BuildAssemblerVerbosity>OnlyWarningsAndErrors</BuildAssemblerVerbosity> |
|
||||
<HelpFileFormat>HtmlHelp1</HelpFileFormat> |
|
||||
<IndentHtml>False</IndentHtml> |
|
||||
<KeepLogFile>True</KeepLogFile> |
|
||||
<DisableCodeBlockComponent>False</DisableCodeBlockComponent> |
|
||||
<CppCommentsFixup>False</CppCommentsFixup> |
|
||||
<CleanIntermediates>True</CleanIntermediates> |
|
||||
<MaximumGroupParts>2</MaximumGroupParts> |
|
||||
<NamespaceGrouping>False</NamespaceGrouping> |
|
||||
<SyntaxFilters>Standard</SyntaxFilters> |
|
||||
<SdkLinkTarget>Blank</SdkLinkTarget> |
|
||||
<RootNamespaceContainer>False</RootNamespaceContainer> |
|
||||
<PresentationStyle>VS2013</PresentationStyle> |
|
||||
<Preliminary>False</Preliminary> |
|
||||
<NamingMethod>Guid</NamingMethod> |
|
||||
<HelpTitle>ImageProcessor Documented Class Library</HelpTitle> |
|
||||
<ContentPlacement>AboveNamespaces</ContentPlacement> |
|
||||
<DocumentationSources> |
|
||||
<DocumentationSource sourceFile="_BuildOutput\ImageProcessor\lib\net45\ImageProcessor.dll" xmlns="" /> |
|
||||
<DocumentationSource sourceFile="_BuildOutput\ImageProcessor\lib\net45\ImageProcessor.XML" xmlns="" /> |
|
||||
</DocumentationSources> |
|
||||
<ProjectSummary>Imageprocessor is a lightweight library written in C# that allows you to manipulate images on-the-fly using .NET. |
|
||||
|
|
||||
It&#39%3bs fast, extensible, easy to use, comes bundled with some great features and is fully open source. |
|
||||
|
|
||||
For full documentation please see http://imageprocessor.org/</ProjectSummary> |
|
||||
<NamespaceSummaries> |
|
||||
<NamespaceSummaryItem name="ImageProcessor" isDocumented="True" xmlns="">The main namespace for all features</NamespaceSummaryItem> |
|
||||
<NamespaceSummaryItem name="ImageProcessor.Common.Exceptions" isDocumented="True" xmlns="">Regroups the possible exceptions</NamespaceSummaryItem> |
|
||||
<NamespaceSummaryItem name="ImageProcessor.Common.Extensions" isDocumented="True" xmlns="">Regroups the extensions</NamespaceSummaryItem> |
|
||||
<NamespaceSummaryItem name="ImageProcessor.Configuration" isDocumented="True" xmlns="">The library configuration</NamespaceSummaryItem> |
|
||||
<NamespaceSummaryItem name="ImageProcessor.Imaging" isDocumented="True" xmlns="">The imaging components</NamespaceSummaryItem> |
|
||||
<NamespaceSummaryItem name="ImageProcessor.Imaging.Filters" isDocumented="True" xmlns="">The filters to apply on the images</NamespaceSummaryItem> |
|
||||
<NamespaceSummaryItem name="ImageProcessor.Imaging.Formats" isDocumented="True" xmlns="">The possible image formats</NamespaceSummaryItem> |
|
||||
<NamespaceSummaryItem name="ImageProcessor.Processors" isDocumented="True" xmlns="">The image processors</NamespaceSummaryItem> |
|
||||
</NamespaceSummaries> |
|
||||
<MissingTags>Summary, Parameter, Returns, AutoDocumentCtors, TypeParameter, AutoDocumentDispose</MissingTags> |
|
||||
<WorkingPath>_BuildOutput\Help\SandCastle\Working\</WorkingPath> |
|
||||
</PropertyGroup> |
|
||||
<!-- There are no properties for these groups. AnyCPU needs to appear in order for Visual Studio to perform |
|
||||
the build. The others are optional common platform types that may appear. --> |
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
|
||||
</PropertyGroup> |
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
|
||||
</PropertyGroup> |
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> |
|
||||
</PropertyGroup> |
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' "> |
|
||||
</PropertyGroup> |
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' "> |
|
||||
</PropertyGroup> |
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' "> |
|
||||
</PropertyGroup> |
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|Win32' "> |
|
||||
</PropertyGroup> |
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|Win32' "> |
|
||||
</PropertyGroup> |
|
||||
<ItemGroup> |
|
||||
<ProjectReference Include="..\src\ImageProcessor\ImageProcessor.csproj"> |
|
||||
<Name>ImageProcessor</Name> |
|
||||
<Project>{3B5DD734-FB7A-487D-8CE6-55E7AF9AEA7E}</Project> |
|
||||
</ProjectReference> |
|
||||
</ItemGroup> |
|
||||
<!-- Import the SHFB build targets --> |
|
||||
<Import Project="$(SHFBROOT)\SandcastleHelpFileBuilder.targets" /> |
|
||||
</Project> |
|
||||
@ -1,31 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"> |
|
||||
<metadata> |
|
||||
<id>ImageProcessor.Plugins.Cair</id> |
|
||||
<version>1.0.1.0</version> |
|
||||
<title>ImageProcessor.Plugins.Cair</title> |
|
||||
<authors>James South</authors> |
|
||||
<owners>James South</owners> |
|
||||
<projectUrl>http://imageprocessor.org</projectUrl> |
|
||||
<iconUrl>http://imageprocessor.org/assets/ico/apple-touch-icon-144x144.png</iconUrl> |
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance> |
|
||||
<description>Adds support to ImageProcessor for Content Aware Image Resizing. |
|
||||
|
|
||||
If you use ImageProcessor please get in touch via my twitter @james_m_south |
|
||||
|
|
||||
Feedback is always welcome</description> |
|
||||
<summary>Adds support to ImageProcessor for Content Aware Image Resizing.</summary> |
|
||||
<releaseNotes /> |
|
||||
<copyright>James South</copyright> |
|
||||
<language>en-GB</language> |
|
||||
<tags>Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff Cair Seam Carving</tags> |
|
||||
<dependencies> |
|
||||
<group targetFramework=".NETFramework4.5"> |
|
||||
<dependency id="ImageProcessor" version="2.2.3.0" /> |
|
||||
</group> |
|
||||
</dependencies> |
|
||||
</metadata> |
|
||||
<files> |
|
||||
<file src="..\_BuildOutput\ImageProcessor.Plugins.Cair\lib\net45\ImageProcessor.Plugins.Cair.dll" target="lib\net45\ImageProcessor.Plugins.Cair.dll" /> |
|
||||
</files> |
|
||||
</package> |
|
||||
@ -1,32 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"> |
|
||||
<metadata> |
|
||||
<id>ImageProcessor.Plugins.WebP</id> |
|
||||
<version>1.0.2.0</version> |
|
||||
<title>ImageProcessor.Plugins.WebP</title> |
|
||||
<authors>James South</authors> |
|
||||
<owners>James South</owners> |
|
||||
<projectUrl>http://imageprocessor.org</projectUrl> |
|
||||
<iconUrl>http://imageprocessor.org/assets/ico/apple-touch-icon-144x144.png</iconUrl> |
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance> |
|
||||
<description>Adds support to ImageProcessor for the WebP image format. |
|
||||
|
|
||||
If you use ImageProcessor please get in touch via my twitter @james_m_south |
|
||||
|
|
||||
Feedback is always welcome</description> |
|
||||
<summary>Adds support to ImageProcessor and ImageProcessor.Web for the WebP image format.</summary> |
|
||||
<releaseNotes /> |
|
||||
<copyright>James South</copyright> |
|
||||
<language>en-GB</language> |
|
||||
<tags>Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff WebP</tags> |
|
||||
<dependencies> |
|
||||
<group targetFramework=".NETFramework4.5"> |
|
||||
<dependency id="ImageProcessor" version="2.2.3.0" /> |
|
||||
</group> |
|
||||
</dependencies> |
|
||||
</metadata> |
|
||||
<files> |
|
||||
<file src="..\content\ImageProcessor.Plugins.WebP\web.config.transform" target="content\web.config.transform" /> |
|
||||
<file src="..\_BuildOutput\ImageProcessor.Plugins.WebP\lib\net45\ImageProcessor.Plugins.WebP.dll" target="lib\net45\ImageProcessor.Plugins.WebP.dll" /> |
|
||||
</files> |
|
||||
</package> |
|
||||
@ -1,35 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"> |
|
||||
<metadata> |
|
||||
<id>ImageProcessor.Web.Config</id> |
|
||||
<version>2.2.1.0</version> |
|
||||
<title>ImageProcessor.Web.Config</title> |
|
||||
<authors>James South</authors> |
|
||||
<owners>James South</owners> |
|
||||
<projectUrl>http://imageprocessor.org</projectUrl> |
|
||||
<iconUrl>http://imageprocessor.org/assets/ico/apple-touch-icon-144x144.png</iconUrl> |
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance> |
|
||||
<description>Adds configuration to your ImageProcessor.Web solution to allow you to override the default settings. |
|
||||
|
|
||||
If you use ImageProcessor.Web please get in touch via my twitter @james_m_south |
|
||||
|
|
||||
Feedback is always welcome</description> |
|
||||
<summary>ImageProcessor.Web configuration settings for ASP.NET websites.</summary> |
|
||||
<releaseNotes /> |
|
||||
<copyright>James South</copyright> |
|
||||
<language>en-GB</language> |
|
||||
<tags>Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff ASP Cache EXIF</tags> |
|
||||
<dependencies> |
|
||||
<group targetFramework=".NETFramework4.5"> |
|
||||
<dependency id="ImageProcessor" version="2.2.3.0" /> |
|
||||
<dependency id="ImageProcessor.Web" version="4.3.0.0" /> |
|
||||
</group> |
|
||||
</dependencies> |
|
||||
</metadata> |
|
||||
<files> |
|
||||
<file src="..\..\src\ImageProcessor.Web\Configuration\Resources\cache.config.transform" target="content\config\imageprocessor\cache.config.transform" /> |
|
||||
<file src="..\..\src\ImageProcessor.Web\Configuration\Resources\processing.config.transform" target="content\config\imageprocessor\processing.config.transform" /> |
|
||||
<file src="..\..\src\ImageProcessor.Web\Configuration\Resources\security.config.transform" target="content\config\imageprocessor\security.config.transform" /> |
|
||||
<file src="..\content\ImageProcessor.Web.Config\web.config.transform" target="content\web.config.transform" /> |
|
||||
</files> |
|
||||
</package> |
|
||||
@ -1,41 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"> |
|
||||
<metadata> |
|
||||
<id>ImageProcessor.Web.Plugins.AzureBlobCache</id> |
|
||||
<version>1.0.1.0</version> |
|
||||
<title>ImageProcessor.Web.Plugins.AzureBlobCache</title> |
|
||||
<authors>James South</authors> |
|
||||
<owners>James South</owners> |
|
||||
<projectUrl>http://imageprocessor.org</projectUrl> |
|
||||
<iconUrl>http://imageprocessor.org/assets/ico/apple-touch-icon-144x144.png</iconUrl> |
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance> |
|
||||
<description>Adds a self cleaning cache that uses Azure Blob Containers to store processed images. |
|
||||
|
|
||||
If you use ImageProcessor.Web please get in touch via my twitter @james_m_south |
|
||||
|
|
||||
Feedback is always welcome</description> |
|
||||
<summary>ImageProcessor.Web AzureBlobCache for ASP.NET websites.</summary> |
|
||||
<releaseNotes /> |
|
||||
<copyright>James South</copyright> |
|
||||
<language>en-GB</language> |
|
||||
<tags>Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff Azure Cache Asp</tags> |
|
||||
<dependencies> |
|
||||
<group targetFramework=".NETFramework4.5"> |
|
||||
<dependency id="ImageProcessor" version="2.2.3.0" /> |
|
||||
<dependency id="ImageProcessor.Web" version="4.3.0.0" /> |
|
||||
<dependency id="ImageProcessor.Web.Config" version="2.2.1.0" /> |
|
||||
<dependency id="Microsoft.Data.Edm" version="5.6.2" /> |
|
||||
<dependency id="Microsoft.Data.OData" version="5.6.2" /> |
|
||||
<dependency id="Microsoft.Data.Services.Client" version="5.6.2" /> |
|
||||
<dependency id="Microsoft.WindowsAzure.ConfigurationManager" version="1.8.0.0" /> |
|
||||
<dependency id="Newtonsoft.Json" version="5.0.8" /> |
|
||||
<dependency id="System.Spatial" version="5.6.2" /> |
|
||||
<dependency id="WindowsAzure.Storage" version="4.3.0" /> |
|
||||
</group> |
|
||||
</dependencies> |
|
||||
</metadata> |
|
||||
<files> |
|
||||
<file src="..\content\ImageProcessor.Web.Plugins.AzureBlobCache\config\imageprocessor\cache.config.transform" target="content\config\imageprocessor\cache.config.transform" /> |
|
||||
<file src="..\_BuildOutput\ImageProcessor.Web.Plugins.AzureBlobCache\lib\net45\ImageProcessor.Web.Plugins.AzureBlobCache.dll" target="lib\net45\ImageProcessor.Web.Plugins.AzureBlobCache.dll" /> |
|
||||
</files> |
|
||||
</package> |
|
||||
@ -1,32 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"> |
|
||||
<metadata> |
|
||||
<id>ImageProcessor.Web.PostProcessor</id> |
|
||||
<version>1.0.3.0</version> |
|
||||
<title>ImageProcessor.Web.PostProcessor</title> |
|
||||
<authors>James South</authors> |
|
||||
<owners>James South</owners> |
|
||||
<projectUrl>http://imageprocessor.org</projectUrl> |
|
||||
<iconUrl>http://imageprocessor.org/assets/ico/apple-touch-icon-144x144.png</iconUrl> |
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance> |
|
||||
<description>Applies various image compression tools to further optimize cached .png, .gif, and .jpg images. |
|
||||
|
|
||||
If you use ImageProcessor please get in touch via my twitter @james_m_south |
|
||||
|
|
||||
Feedback is always welcome</description> |
|
||||
<summary>ImageProcessor.Web PostProcessor for ASP.NET websites.</summary> |
|
||||
<releaseNotes /> |
|
||||
<copyright>James South</copyright> |
|
||||
<language>en-GB</language> |
|
||||
<tags>Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff ASP Cache EXIF</tags> |
|
||||
<dependencies> |
|
||||
<group targetFramework=".NETFramework4.5"> |
|
||||
<dependency id="ImageProcessor" version="2.2.3.0" /> |
|
||||
<dependency id="ImageProcessor.Web" version="4.3.0.0" /> |
|
||||
</group> |
|
||||
</dependencies> |
|
||||
</metadata> |
|
||||
<files> |
|
||||
<file src="..\_BuildOutput\ImageProcessor.Web.PostProcessor\lib\net45\ImageProcessor.Web.PostProcessor.dll" target="lib\net45\ImageProcessor.Web.PostProcessor.dll" /> |
|
||||
</files> |
|
||||
</package> |
|
||||
@ -1,34 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"> |
|
||||
<metadata> |
|
||||
<id>ImageProcessor.Web</id> |
|
||||
<version>4.3.0.0</version> |
|
||||
<title>ImageProcessor.Web</title> |
|
||||
<authors>James South</authors> |
|
||||
<owners>James South</owners> |
|
||||
<projectUrl>http://imageprocessor.org</projectUrl> |
|
||||
<iconUrl>http://imageprocessor.org/assets/ico/apple-touch-icon-144x144.png</iconUrl> |
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance> |
|
||||
<description>ImageProcessor.Web adds a configurable HttpModule to your website which allows on-the-fly processing of image files. The module also comes with a file and browser based cache that can handle millions of images, increasing your processing output and saving precious server memory. |
|
||||
|
|
||||
Methods include: Resize, Rotate, Rounded Corners, Flip, Crop, Watermark, Filter, Saturation, Brightness, Contrast, Quality, Format, Vignette, Gaussian Blur, Gaussian Sharpen, and Transparency. |
|
||||
|
|
||||
If you use ImageProcessor.Web please get in touch via my twitter @james_m_south |
|
||||
|
|
||||
Feedback is always welcome</description> |
|
||||
<summary>An extension to ImageProcessor that allows on-the-fly processing of image files in an ASP.NET website</summary> |
|
||||
<releaseNotes /> |
|
||||
<copyright>James South</copyright> |
|
||||
<language>en-GB</language> |
|
||||
<tags>Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff ASP Cache EXIF</tags> |
|
||||
<dependencies> |
|
||||
<group targetFramework=".NETFramework4.5"> |
|
||||
<dependency id="ImageProcessor" version="2.2.3.0" /> |
|
||||
</group> |
|
||||
</dependencies> |
|
||||
</metadata> |
|
||||
<files> |
|
||||
<file src="..\content\ImageProcessor.Web\web.config.transform" target="content\web.config.transform" /> |
|
||||
<file src="..\_BuildOutput\ImageProcessor.Web\lib\net45\ImageProcessor.Web.dll" target="lib\net45\ImageProcessor.Web.dll" /> |
|
||||
</files> |
|
||||
</package> |
|
||||
@ -1,29 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> |
|
||||
<metadata> |
|
||||
<id>ImageProcessor</id> |
|
||||
<version>2.2.4.0</version> |
|
||||
<title>ImageProcessor</title> |
|
||||
<authors>James South</authors> |
|
||||
<owners>James South</owners> |
|
||||
<projectUrl>http://imageprocessor.org</projectUrl> |
|
||||
<iconUrl>http://imageprocessor.org/assets/ico/apple-touch-icon-144x144.png</iconUrl> |
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance> |
|
||||
<description>Image Processor is an easy to use and extend processing library written in C#. Its fluent API makes common imaging tasks very simple to perform. |
|
||||
|
|
||||
Methods include; Resize, Rotate, Rounded Corners, Flip, Crop, Watermark, Filter, Saturation, Brightness, Contrast, Quality, Format, Vignette, Gaussian Blur, Gaussian Sharpen, and Transparency. |
|
||||
|
|
||||
If you use ImageProcessor please get in touch on my twitter @james_m_south. |
|
||||
|
|
||||
Feedback is always welcome.</description> |
|
||||
<summary>A library for manipulating image files written in C#.</summary> |
|
||||
<releaseNotes /> |
|
||||
<copyright>James South</copyright> |
|
||||
<language>en-GB</language> |
|
||||
<tags>Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff Fluent Animated EXIF</tags> |
|
||||
</metadata> |
|
||||
<files> |
|
||||
<file src="..\_BuildOutput\ImageProcessor\lib\net40\ImageProcessor.dll" target="lib\net40\ImageProcessor.dll" /> |
|
||||
<file src="..\_BuildOutput\ImageProcessor\lib\net45\ImageProcessor.dll" target="lib\net45\ImageProcessor.dll" /> |
|
||||
</files> |
|
||||
</package> |
|
||||
@ -1,244 +0,0 @@ |
|||||
Properties { |
|
||||
# call nuget.bat with these values as parameters |
|
||||
$NugetApiKey = $null |
|
||||
$NugetSource = $null |
|
||||
|
|
||||
# see appveyor.yml for usage |
|
||||
$BuildNumber = $null |
|
||||
$CoverallsRepoToken = $null |
|
||||
$AppVeyor = $null |
|
||||
|
|
||||
# Input and output paths |
|
||||
$BUILD_PATH = Resolve-Path "." |
|
||||
$SRC_PATH = Join-Path $BUILD_PATH "..\src" |
|
||||
$PLUGINS_PATH = Join-Path $SRC_PATH "Plugins\ImageProcessor" |
|
||||
$NUSPECS_PATH = Join-Path $BUILD_PATH "NuSpecs" |
|
||||
$BIN_PATH = Join-Path $BUILD_PATH "_BuildOutput" |
|
||||
$NUGET_OUTPUT = Join-Path $BIN_PATH "NuGets" |
|
||||
$TEST_RESULTS = Join-Path $BUILD_PATH "TestResults" |
|
||||
|
|
||||
# API documentation |
|
||||
$API_BIN_PATH = Join-Path $BIN_PATH "ImageProcessor\lib\net45\ImageProcessor.dll" # from which DLL Docu builds its help output |
|
||||
$API_DOC_PATH = Join-Path $BIN_PATH "Help\docu" |
|
||||
|
|
||||
# External binaries paths |
|
||||
$NUGET_EXE = Join-Path $SRC_PATH ".nuget\NuGet.exe" |
|
||||
$NUNIT_EXE = Join-Path $SRC_PATH "packages\NUnit.Runners.2.6.3\tools\nunit-console.exe" |
|
||||
$COVERALLS_EXE = Join-Path $SRC_PATH "packages\coveralls.io.1.3.2\tools\coveralls.net.exe" |
|
||||
$OPENCOVER_EXE = Join-Path $SRC_PATH "packages\OpenCover.4.5.3809-rc94\OpenCover.Console.exe" |
|
||||
$REPORTGEN_EXE = Join-Path $SRC_PATH "packages\ReportGenerator.1.9.1.0\ReportGenerator.exe" |
|
||||
$NUNITREPORT_EXE = Join-Path $BUILD_PATH "tools\NUnitHTMLReportGenerator.exe" |
|
||||
|
|
||||
# list of projects |
|
||||
$PROJECTS_PATH = (Join-Path $BUILD_PATH "build.xml") |
|
||||
[xml]$PROJECTS = Get-Content $PROJECTS_PATH |
|
||||
|
|
||||
$TestProjects = @( |
|
||||
"ImageProcessor.UnitTests", |
|
||||
"ImageProcessor.Web.UnitTests" |
|
||||
) |
|
||||
} |
|
||||
|
|
||||
Framework "4.0x86" |
|
||||
FormatTaskName "-------- {0} --------" |
|
||||
|
|
||||
task default -depends Cleanup-Binaries, Set-VersionNumber, Build-Solution, Run-Tests, Run-Coverage, Generate-Nuget |
|
||||
|
|
||||
# cleans up the binaries output folder |
|
||||
task Cleanup-Binaries { |
|
||||
Write-Host "Removing binaries and artifacts so everything is nice and clean" |
|
||||
if (Test-Path $BIN_PATH) { |
|
||||
Remove-Item $BIN_PATH -Force -Recurse |
|
||||
} |
|
||||
|
|
||||
if (Test-Path $NUGET_OUTPUT) { |
|
||||
Remove-Item $NUGET_OUTPUT -Force -Recurse |
|
||||
} |
|
||||
|
|
||||
if (Test-Path $TEST_RESULTS) { |
|
||||
Remove-Item $TEST_RESULTS -Force -Recurse |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
# sets the version number from the build number in the build.xml file |
|
||||
task Set-VersionNumber { |
|
||||
if ($BuildNumber -eq $null -or $BuildNumber -eq "") { |
|
||||
return |
|
||||
} |
|
||||
|
|
||||
$PROJECTS.projects.project | % { |
|
||||
if ($_.version -match "([\d+\.]*)[\d+|\*]") { # get numbers of current version except last one |
|
||||
$_.version = "$($Matches[1])$BuildNumber" |
|
||||
} |
|
||||
} |
|
||||
$PROJECTS.Save($PROJECTS_PATH) |
|
||||
} |
|
||||
|
|
||||
# builds the solutions |
|
||||
task Build-Solution -depends Cleanup-Binaries, Set-VersionNumber { |
|
||||
Write-Host "Building projects" |
|
||||
|
|
||||
# build the projects |
|
||||
# regular "$xmlobject.node | % { $_ }" don't work when they're nested: http://fredmorrison.wordpress.com/2013/03/19/reading-xml-with-powershell-why-most-examples-you-see-are-wrong/ |
|
||||
[System.Xml.XmlElement] $root = $PROJECTS.get_DocumentElement() |
|
||||
[System.Xml.XmlElement] $project = $null |
|
||||
foreach($project in $root.ChildNodes) { |
|
||||
if ($project.projfile -eq $null -or $project.projfile -eq "") { |
|
||||
continue # goes to next item |
|
||||
} |
|
||||
|
|
||||
$projectPath = Resolve-Path $project.folder |
|
||||
Write-Host "Building project $($project.name) at version $($project.version)" |
|
||||
|
|
||||
# it would be possible to update more infos from the xml (description etc), so as to have all infos in one place |
|
||||
Update-AssemblyInfo -file (Join-Path $projectPath "Properties\AssemblyInfo.cs") -version $project.version |
|
||||
|
|
||||
[System.Xml.XmlElement] $output = $null |
|
||||
foreach($output in $project.outputs.ChildNodes) { |
|
||||
# using invoke-expression solves a few character escape issues |
|
||||
$buildCommand = "msbuild $(Join-Path $projectPath $project.projfile) /t:Build /p:Warnings=true /p:Configuration=Release /p:PipelineDependsOnBuild=False /p:OutDir=$(Join-Path $BIN_PATH $output.folder) $($output.additionalParameters) /clp:WarningsOnly /clp:ErrorsOnly /clp:Summary /clp:PerformanceSummary /v:Normal /nologo" |
|
||||
Write-Host $buildCommand -ForegroundColor DarkGreen |
|
||||
Exec { |
|
||||
Invoke-Expression $buildCommand |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
# builds the test projects |
|
||||
task Build-Tests -depends Cleanup-Binaries { |
|
||||
Write-Host "Building the unit test projects" |
|
||||
|
|
||||
if (-not (Test-Path $TEST_RESULTS)) { |
|
||||
mkdir $TEST_RESULTS | Out-Null |
|
||||
} |
|
||||
|
|
||||
# make sure the runner exes are restored |
|
||||
& $NUGET_EXE restore (Join-Path $SRC_PATH "ImageProcessor.sln") |
|
||||
|
|
||||
# build the test projects |
|
||||
$TestProjects | % { |
|
||||
Write-Host "Building project $_" |
|
||||
Exec { |
|
||||
msbuild (Join-Path $SRC_PATH "$_\$_.csproj") /t:Build /p:Configuration=Release /p:Platform="AnyCPU" /p:Warnings=true /clp:WarningsOnly /clp:ErrorsOnly /v:Normal /nologo |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
# runs the unit tests |
|
||||
task Run-Tests -depends Build-Tests { |
|
||||
Write-Host "Running unit tests" |
|
||||
$TestProjects | % { |
|
||||
$TestDllFolder = Join-Path $SRC_PATH "$_\bin\Release" |
|
||||
$TestDdlPath = Join-Path $TestDllFolder "$_.dll" |
|
||||
$TestOutputPath = Join-Path $TEST_RESULTS "$($_)_Unit.xml" |
|
||||
|
|
||||
Write-Host "Running unit tests on project $_" |
|
||||
& $NUNIT_EXE $TestDdlPath /result:$TestOutputPath /noshadow /nologo |
|
||||
|
|
||||
$ReportPath = (Join-Path $TEST_RESULTS "Tests") |
|
||||
if (-not (Test-Path $ReportPath)) { |
|
||||
mkdir $ReportPath | Out-Null |
|
||||
} |
|
||||
|
|
||||
Write-Host "Transforming tests results file to HTML" |
|
||||
& $NUNITREPORT_EXE $TestOutputPath (Join-Path $ReportPath "$_.html") |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
# runs the code coverage (separate from the unit test because it takes so much longer) |
|
||||
task Run-Coverage -depends Build-Tests { |
|
||||
Write-Host "Running code coverage over unit tests" |
|
||||
$TestProjects | % { |
|
||||
$TestDllFolder = Join-Path $SRC_PATH "$_\bin\Release" |
|
||||
$TestDdlPath = Join-Path $TestDllFolder "$_.dll" |
|
||||
$CoverageOutputPath = Join-Path $TEST_RESULTS "$($_)_Coverage.xml" |
|
||||
|
|
||||
Write-Host "AppVeyor $AppVeyor" |
|
||||
|
|
||||
$appVeyor = "" |
|
||||
if ($AppVeyor -ne $null -and $AppVeyor -ne "") { |
|
||||
$appVeyor = " -appveyor" |
|
||||
} |
|
||||
|
|
||||
Write-Host "Running code coverage on project $_" |
|
||||
$coverageFilter = "-filter:+[*]* -[FluentAssertions*]* -[ImageProcessor]*Common.Exceptions -[ImageProcessor.UnitTests]* -[ImageProcessor.Web.UnitTests]*" |
|
||||
& $OPENCOVER_EXE -threshold:1 -oldstyle -register:user -target:$NUNIT_EXE -targetargs:"$TestDdlPath /noshadow /nologo" $appVeyor -targetdir:$TestDllFolder -output:$CoverageOutputPath $coverageFilter |
|
||||
|
|
||||
Write-Host "Transforming coverage results file to HTML" |
|
||||
& $REPORTGEN_EXE -verbosity:Info -reports:$CoverageOutputPath -targetdir:(Join-Path $TEST_RESULTS "Coverage\$_") |
|
||||
|
|
||||
Write-Host "CoverallsRepoToken $CoverallsRepoToken" |
|
||||
|
|
||||
if ($CoverallsRepoToken -ne $null -and $CoverallsRepoToken -ne "") { |
|
||||
Write-Host "Uploading coverage report to Coveralls.io" |
|
||||
Exec { . $COVERALLS_EXE --opencover $CoverageOutputPath } |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
# generates the API documentation. Disabled for now. |
|
||||
task Generate-APIDoc -depends Build-Solution { |
|
||||
Write-Host "Generating API docs" |
|
||||
|
|
||||
& .\tools\docu\docu.exe $API_BIN_PATH --output=$API_DOC_PATH |
|
||||
|
|
||||
& .\tools\doxygen\doxygen.exe .\Doxyfile |
|
||||
} |
|
||||
|
|
||||
# generates a Nuget package |
|
||||
task Generate-Nuget -depends Set-VersionNumber, Build-Solution { |
|
||||
Write-Host "Generating Nuget packages for each project" |
|
||||
|
|
||||
# Nuget doesn't create the output dir automatically... |
|
||||
if (-not (Test-Path $NUGET_OUTPUT)) { |
|
||||
mkdir $NUGET_OUTPUT | Out-Null |
|
||||
} |
|
||||
|
|
||||
# Package the nuget |
|
||||
$PROJECTS.projects.project | % { |
|
||||
$nuspec_local_path = (Join-Path $NUSPECS_PATH $_.nuspec) |
|
||||
Write-Host "Building Nuget package from $nuspec_local_path" |
|
||||
|
|
||||
# change the version values |
|
||||
[xml]$nuspec_contents = Get-Content $nuspec_local_path |
|
||||
$nuspec_contents.package.metadata.version = $_.version |
|
||||
$nuspec_contents.Save($nuspec_local_path) |
|
||||
|
|
||||
if ((-not (Test-Path $nuspec_local_path)) -or (-not (Test-Path $NUGET_OUTPUT))) { |
|
||||
throw New-Object [System.IO.FileNotFoundException] "The file $nuspec_local_path or $NUGET_OUTPUT could not be found" |
|
||||
} |
|
||||
|
|
||||
# pack the nuget |
|
||||
& $NUGET_EXE Pack $nuspec_local_path -OutputDirectory $NUGET_OUTPUT |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
# publishes the nuget on a feed |
|
||||
task Publish-Nuget { |
|
||||
if ($NugetApiKey -eq $null -or $NugetApiKey -eq "") { |
|
||||
throw New-Object [System.ArgumentException] "You must provide an API key as parameter: 'Invoke-psake Publish-Nuget -properties @{`"NugetApiKey`"=`"YOURAPIKEY`"}' ; or add a APIKEY environment variable to AppVeyor" |
|
||||
} |
|
||||
|
|
||||
Get-ChildItem $NUGET_OUTPUT -Filter "*.nugpkg" | % { |
|
||||
if ($NugetSource -eq $null -or $NugetSource -eq "") { |
|
||||
& $NUGET_EXE push $_ -ApiKey $apikey -Source $NugetSource |
|
||||
} else { |
|
||||
& $NUGET_EXE push $_ -ApiKey $apikey |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
# updates the AssemblyInfo file with the specified version |
|
||||
# http://www.luisrocha.net/2009/11/setting-assembly-version-with-windows.html |
|
||||
function Update-AssemblyInfo ([string]$file, [string] $version) { |
|
||||
$assemblyVersionPattern = 'AssemblyVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)' |
|
||||
$fileVersionPattern = 'AssemblyFileVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)' |
|
||||
$assemblyVersion = 'AssemblyVersion("' + $version + '")'; |
|
||||
$fileVersion = 'AssemblyFileVersion("' + $version + '")'; |
|
||||
|
|
||||
(Get-Content $file) | ForEach-Object { |
|
||||
% {$_ -replace $assemblyVersionPattern, $assemblyVersion } | |
|
||||
% {$_ -replace $fileVersionPattern, $fileVersion } |
|
||||
} | Set-Content $file |
|
||||
} |
|
||||
@ -1,74 +0,0 @@ |
|||||
<projects> |
|
||||
<project> |
|
||||
<name>ImageProcessor</name> |
|
||||
<version>2.2.4.0</version> |
|
||||
<folder>..\src\ImageProcessor</folder> |
|
||||
<projfile>ImageProcessor.csproj</projfile> |
|
||||
<outputs> |
|
||||
<output additionalParameters="/p:Framework=NET40" folder="ImageProcessor\lib\net40" /> |
|
||||
<output additionalParameters="/p:Framework=NET45" folder="ImageProcessor\lib\net45" /> |
|
||||
</outputs> |
|
||||
<nuspec>ImageProcessor.nuspec</nuspec> |
|
||||
</project> |
|
||||
|
|
||||
<project> |
|
||||
<name>ImageProcessor Web</name> |
|
||||
<version>4.3.0.0</version> |
|
||||
<folder>..\src\ImageProcessor.Web</folder> |
|
||||
<projfile>ImageProcessor.Web.csproj</projfile> |
|
||||
<outputs> |
|
||||
<output folder="ImageProcessor.Web\lib\net45" /> |
|
||||
</outputs> |
|
||||
<nuspec>ImageProcessor.Web.nuspec</nuspec> |
|
||||
</project> |
|
||||
|
|
||||
<project> |
|
||||
<name>ImageProcessor Web.config sample</name> |
|
||||
<version>2.2.1.0</version> |
|
||||
<nuspec>ImageProcessor.Web.Config.nuspec</nuspec> |
|
||||
</project> |
|
||||
|
|
||||
<project> |
|
||||
<name>ImageProcessor Web PostProcessor</name> |
|
||||
<version>1.0.3.0</version> |
|
||||
<folder>..\src\ImageProcessor.Web.PostProcessor</folder> |
|
||||
<projfile>ImageProcessor.Web.PostProcessor.csproj</projfile> |
|
||||
<outputs> |
|
||||
<output folder="ImageProcessor.Web.PostProcessor\lib\net45" /> |
|
||||
</outputs> |
|
||||
<nuspec>ImageProcessor.Web.PostProcessor.nuspec</nuspec> |
|
||||
</project> |
|
||||
|
|
||||
<project> |
|
||||
<name>ImageProcessor Web Azure Blob Cache plugin</name> |
|
||||
<version>1.0.1.0</version> |
|
||||
<folder>..\src\Plugins\ImageProcessor.Web\ImageProcessor.Web.Plugins.AzureBlobCache</folder> |
|
||||
<projfile>ImageProcessor.Web.Plugins.AzureBlobCache.csproj</projfile> |
|
||||
<outputs> |
|
||||
<output folder="ImageProcessor.Web.Plugins.AzureBlobCache\lib\net45" /> |
|
||||
</outputs> |
|
||||
<nuspec>ImageProcessor.Web.Plugins.AzureBlobCache.nuspec</nuspec> |
|
||||
</project> |
|
||||
|
|
||||
<project> |
|
||||
<name>ImageProcessor Cair plugin</name> |
|
||||
<version>1.0.1.0</version> |
|
||||
<folder>..\src\Plugins\ImageProcessor\ImageProcessor.Plugins.Cair</folder> |
|
||||
<projfile>ImageProcessor.Plugins.Cair.csproj</projfile> |
|
||||
<outputs> |
|
||||
<output folder="ImageProcessor.Plugins.Cair\lib\net45" /> |
|
||||
</outputs> |
|
||||
<nuspec>ImageProcessor.Plugins.Cair.nuspec</nuspec> |
|
||||
</project> |
|
||||
|
|
||||
<project> |
|
||||
<name>ImageProcessor WebP plugin</name> |
|
||||
<version>1.0.2.0</version> |
|
||||
<folder>..\src\Plugins\ImageProcessor\ImageProcessor.Plugins.WebP</folder> |
|
||||
<projfile>ImageProcessor.Plugins.WebP.csproj</projfile> |
|
||||
<outputs> |
|
||||
<output folder="ImageProcessor.Plugins.WebP\lib\net45" /> |
|
||||
</outputs> |
|
||||
<nuspec>ImageProcessor.Plugins.WebP.nuspec</nuspec> |
|
||||
</project> |
|
||||
</projects> |
|
||||
@ -1,9 +0,0 @@ |
|||||
<?xml version="1.0"?> |
|
||||
<configuration> |
|
||||
<system.webServer> |
|
||||
<staticContent> |
|
||||
<remove fileExtension=".webp"/> |
|
||||
<mimeMap fileExtension=".webp" mimeType="image/webp" /> |
|
||||
</staticContent> |
|
||||
</system.webServer> |
|
||||
</configuration> |
|
||||
@ -1,16 +0,0 @@ |
|||||
<?xml version="1.0"?> |
|
||||
<configuration> |
|
||||
<configSections> |
|
||||
<sectionGroup name="imageProcessor"> |
|
||||
<section name="security" requirePermission="false" type="ImageProcessor.Web.Configuration.ImageSecuritySection, ImageProcessor.Web"/> |
|
||||
<section name="processing" requirePermission="false" type="ImageProcessor.Web.Configuration.ImageProcessingSection, ImageProcessor.Web"/> |
|
||||
<section name="caching" requirePermission="false" type="ImageProcessor.Web.Configuration.ImageCacheSection, ImageProcessor.Web"/> |
|
||||
</sectionGroup> |
|
||||
</configSections> |
|
||||
|
|
||||
<imageProcessor> |
|
||||
<security configSource="config\imageprocessor\security.config" /> |
|
||||
<caching configSource="config\imageprocessor\cache.config" /> |
|
||||
<processing configSource="config\imageprocessor\processing.config" /> |
|
||||
</imageProcessor> |
|
||||
</configuration> |
|
||||
@ -1,14 +0,0 @@ |
|||||
<caching currentCache="AzureBlobCache"> |
|
||||
<caches> |
|
||||
<cache name="AzureBlobCache" type="ImageProcessor.Web.Plugins.AzureBlobCache.AzureBlobCache, ImageProcessor.Web.Plugins.AzureBlobCache" maxDays="365"> |
|
||||
<settings> |
|
||||
<setting key="CachedStorageAccount" value="DefaultEndpointsProtocol=https;AccountName=[CacheAccountName];AccountKey=[CacheAccountKey]"/> |
|
||||
<setting key="CachedBlobContainer" value="cache"/> |
|
||||
<setting key="CachedCDNRoot" value="[CdnRootUrl]"/> |
|
||||
<setting key="SourceStorageAccount" value=""/> |
|
||||
<setting key="SourceBlobContainer" value=""/> |
|
||||
</settings> |
|
||||
</cache> |
|
||||
</caches> |
|
||||
</caching> |
|
||||
|
|
||||
@ -1,14 +0,0 @@ |
|||||
<?xml version="1.0"?> |
|
||||
<configuration> |
|
||||
<system.web> |
|
||||
<httpModules> |
|
||||
<add name="ImageProcessorModule" type="ImageProcessor.Web.HttpModules.ImageProcessingModule, ImageProcessor.Web"/> |
|
||||
</httpModules> |
|
||||
</system.web> |
|
||||
<system.webServer> |
|
||||
<validation validateIntegratedModeConfiguration="false" /> |
|
||||
<modules> |
|
||||
<add name="ImageProcessorModule" type="ImageProcessor.Web.HttpModules.ImageProcessingModule, ImageProcessor.Web"/> |
|
||||
</modules> |
|
||||
</system.webServer> |
|
||||
</configuration> |
|
||||
@ -1,5 +0,0 @@ |
|||||
@echo off |
|
||||
|
|
||||
powershell "Import-Module %~dp0\psake.psm1 ; Invoke-Psake %~dp0\build.ps1 Run-Coverage ; exit $LASTEXITCODE" |
|
||||
|
|
||||
pause |
|
||||
@ -1,847 +0,0 @@ |
|||||
# psake |
|
||||
# Copyright (c) 2012 James Kovacs |
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy |
|
||||
# of this software and associated documentation files (the "Software"), to deal |
|
||||
# in the Software without restriction, including without limitation the rights |
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|
||||
# copies of the Software, and to permit persons to whom the Software is |
|
||||
# furnished to do so, subject to the following conditions: |
|
||||
# |
|
||||
# The above copyright notice and this permission notice shall be included in |
|
||||
# all copies or substantial portions of the Software. |
|
||||
# |
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
|
||||
# THE SOFTWARE. |
|
||||
|
|
||||
#Requires -Version 2.0 |
|
||||
|
|
||||
#-- Public Module Functions --# |
|
||||
|
|
||||
# .ExternalHelp psake.psm1-help.xml |
|
||||
function Invoke-Task |
|
||||
{ |
|
||||
[CmdletBinding()] |
|
||||
param( |
|
||||
[Parameter(Position=0,Mandatory=1)] [string]$taskName |
|
||||
) |
|
||||
|
|
||||
Assert $taskName ($msgs.error_invalid_task_name) |
|
||||
|
|
||||
$taskKey = $taskName.ToLower() |
|
||||
|
|
||||
if ($currentContext.aliases.Contains($taskKey)) { |
|
||||
$taskName = $currentContext.aliases.$taskKey.Name |
|
||||
$taskKey = $taskName.ToLower() |
|
||||
} |
|
||||
|
|
||||
$currentContext = $psake.context.Peek() |
|
||||
|
|
||||
Assert ($currentContext.tasks.Contains($taskKey)) ($msgs.error_task_name_does_not_exist -f $taskName) |
|
||||
|
|
||||
if ($currentContext.executedTasks.Contains($taskKey)) { return } |
|
||||
|
|
||||
Assert (!$currentContext.callStack.Contains($taskKey)) ($msgs.error_circular_reference -f $taskName) |
|
||||
|
|
||||
$currentContext.callStack.Push($taskKey) |
|
||||
|
|
||||
$task = $currentContext.tasks.$taskKey |
|
||||
|
|
||||
$precondition_is_valid = & $task.Precondition |
|
||||
|
|
||||
if (!$precondition_is_valid) { |
|
||||
WriteColoredOutput ($msgs.precondition_was_false -f $taskName) -foregroundcolor Cyan |
|
||||
} else { |
|
||||
if ($taskKey -ne 'default') { |
|
||||
|
|
||||
if ($task.PreAction -or $task.PostAction) { |
|
||||
Assert ($task.Action -ne $null) ($msgs.error_missing_action_parameter -f $taskName) |
|
||||
} |
|
||||
|
|
||||
if ($task.Action) { |
|
||||
try { |
|
||||
foreach($childTask in $task.DependsOn) { |
|
||||
Invoke-Task $childTask |
|
||||
} |
|
||||
|
|
||||
$stopwatch = [System.Diagnostics.Stopwatch]::StartNew() |
|
||||
$currentContext.currentTaskName = $taskName |
|
||||
|
|
||||
& $currentContext.taskSetupScriptBlock |
|
||||
|
|
||||
if ($task.PreAction) { |
|
||||
& $task.PreAction |
|
||||
} |
|
||||
|
|
||||
if ($currentContext.config.taskNameFormat -is [ScriptBlock]) { |
|
||||
& $currentContext.config.taskNameFormat $taskName |
|
||||
} else { |
|
||||
WriteColoredOutput ($currentContext.config.taskNameFormat -f $taskName) -foregroundcolor Cyan |
|
||||
} |
|
||||
|
|
||||
foreach ($variable in $task.requiredVariables) { |
|
||||
Assert ((test-path "variable:$variable") -and ((get-variable $variable).Value -ne $null)) ($msgs.required_variable_not_set -f $variable, $taskName) |
|
||||
} |
|
||||
|
|
||||
& $task.Action |
|
||||
|
|
||||
if ($task.PostAction) { |
|
||||
& $task.PostAction |
|
||||
} |
|
||||
|
|
||||
& $currentContext.taskTearDownScriptBlock |
|
||||
$task.Duration = $stopwatch.Elapsed |
|
||||
} catch { |
|
||||
if ($task.ContinueOnError) { |
|
||||
"-"*70 |
|
||||
WriteColoredOutput ($msgs.continue_on_error -f $taskName,$_) -foregroundcolor Yellow |
|
||||
"-"*70 |
|
||||
$task.Duration = $stopwatch.Elapsed |
|
||||
} else { |
|
||||
throw $_ |
|
||||
} |
|
||||
} |
|
||||
} else { |
|
||||
# no action was specified but we still execute all the dependencies |
|
||||
foreach($childTask in $task.DependsOn) { |
|
||||
Invoke-Task $childTask |
|
||||
} |
|
||||
} |
|
||||
} else { |
|
||||
foreach($childTask in $task.DependsOn) { |
|
||||
Invoke-Task $childTask |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
Assert (& $task.Postcondition) ($msgs.postcondition_failed -f $taskName) |
|
||||
} |
|
||||
|
|
||||
$poppedTaskKey = $currentContext.callStack.Pop() |
|
||||
Assert ($poppedTaskKey -eq $taskKey) ($msgs.error_corrupt_callstack -f $taskKey,$poppedTaskKey) |
|
||||
|
|
||||
$currentContext.executedTasks.Push($taskKey) |
|
||||
} |
|
||||
|
|
||||
# .ExternalHelp psake.psm1-help.xml |
|
||||
function Exec |
|
||||
{ |
|
||||
[CmdletBinding()] |
|
||||
param( |
|
||||
[Parameter(Position=0,Mandatory=1)][scriptblock]$cmd, |
|
||||
[Parameter(Position=1,Mandatory=0)][string]$errorMessage = ($msgs.error_bad_command -f $cmd), |
|
||||
[Parameter(Position=2,Mandatory=0)][int]$maxRetries = 0, |
|
||||
[Parameter(Position=3,Mandatory=0)][string]$retryTriggerErrorPattern = $null |
|
||||
) |
|
||||
|
|
||||
$tryCount = 1 |
|
||||
|
|
||||
do { |
|
||||
try { |
|
||||
$global:lastexitcode = 0 |
|
||||
& $cmd |
|
||||
if ($lastexitcode -ne 0) { |
|
||||
throw ("Exec: " + $errorMessage) |
|
||||
} |
|
||||
break |
|
||||
} |
|
||||
catch [Exception] |
|
||||
{ |
|
||||
if ($tryCount -gt $maxRetries) { |
|
||||
throw $_ |
|
||||
} |
|
||||
|
|
||||
if ($retryTriggerErrorPattern -ne $null) { |
|
||||
$isMatch = [regex]::IsMatch($_.Exception.Message, $retryTriggerErrorPattern) |
|
||||
|
|
||||
if ($isMatch -eq $false) { |
|
||||
throw $_ |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
Write-Host "Try $tryCount failed, retrying again in 1 second..." |
|
||||
|
|
||||
$tryCount++ |
|
||||
|
|
||||
[System.Threading.Thread]::Sleep([System.TimeSpan]::FromSeconds(1)) |
|
||||
} |
|
||||
} |
|
||||
while ($true) |
|
||||
} |
|
||||
|
|
||||
# .ExternalHelp psake.psm1-help.xml |
|
||||
function Assert |
|
||||
{ |
|
||||
[CmdletBinding()] |
|
||||
param( |
|
||||
[Parameter(Position=0,Mandatory=1)]$conditionToCheck, |
|
||||
[Parameter(Position=1,Mandatory=1)]$failureMessage |
|
||||
) |
|
||||
if (!$conditionToCheck) { |
|
||||
throw ("Assert: " + $failureMessage) |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
# .ExternalHelp psake.psm1-help.xml |
|
||||
function Task |
|
||||
{ |
|
||||
[CmdletBinding()] |
|
||||
param( |
|
||||
[Parameter(Position=0,Mandatory=1)][string]$name = $null, |
|
||||
[Parameter(Position=1,Mandatory=0)][scriptblock]$action = $null, |
|
||||
[Parameter(Position=2,Mandatory=0)][scriptblock]$preaction = $null, |
|
||||
[Parameter(Position=3,Mandatory=0)][scriptblock]$postaction = $null, |
|
||||
[Parameter(Position=4,Mandatory=0)][scriptblock]$precondition = {$true}, |
|
||||
[Parameter(Position=5,Mandatory=0)][scriptblock]$postcondition = {$true}, |
|
||||
[Parameter(Position=6,Mandatory=0)][switch]$continueOnError = $false, |
|
||||
[Parameter(Position=7,Mandatory=0)][string[]]$depends = @(), |
|
||||
[Parameter(Position=8,Mandatory=0)][string[]]$requiredVariables = @(), |
|
||||
[Parameter(Position=9,Mandatory=0)][string]$description = $null, |
|
||||
[Parameter(Position=10,Mandatory=0)][string]$alias = $null, |
|
||||
[Parameter(Position=11,Mandatory=0)][string]$maxRetries = 0, |
|
||||
[Parameter(Position=12,Mandatory=0)][string]$retryTriggerErrorPattern = $null |
|
||||
) |
|
||||
if ($name -eq 'default') { |
|
||||
Assert (!$action) ($msgs.error_default_task_cannot_have_action) |
|
||||
} |
|
||||
|
|
||||
$newTask = @{ |
|
||||
Name = $name |
|
||||
DependsOn = $depends |
|
||||
PreAction = $preaction |
|
||||
Action = $action |
|
||||
PostAction = $postaction |
|
||||
Precondition = $precondition |
|
||||
Postcondition = $postcondition |
|
||||
ContinueOnError = $continueOnError |
|
||||
Description = $description |
|
||||
Duration = [System.TimeSpan]::Zero |
|
||||
RequiredVariables = $requiredVariables |
|
||||
Alias = $alias |
|
||||
MaxRetries = $maxRetries |
|
||||
RetryTriggerErrorPattern = $retryTriggerErrorPattern |
|
||||
} |
|
||||
|
|
||||
$taskKey = $name.ToLower() |
|
||||
|
|
||||
$currentContext = $psake.context.Peek() |
|
||||
|
|
||||
Assert (!$currentContext.tasks.ContainsKey($taskKey)) ($msgs.error_duplicate_task_name -f $name) |
|
||||
|
|
||||
$currentContext.tasks.$taskKey = $newTask |
|
||||
|
|
||||
if($alias) |
|
||||
{ |
|
||||
$aliasKey = $alias.ToLower() |
|
||||
|
|
||||
Assert (!$currentContext.aliases.ContainsKey($aliasKey)) ($msgs.error_duplicate_alias_name -f $alias) |
|
||||
|
|
||||
$currentContext.aliases.$aliasKey = $newTask |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
# .ExternalHelp psake.psm1-help.xml |
|
||||
function Properties { |
|
||||
[CmdletBinding()] |
|
||||
param( |
|
||||
[Parameter(Position=0,Mandatory=1)][scriptblock]$properties |
|
||||
) |
|
||||
$psake.context.Peek().properties += $properties |
|
||||
} |
|
||||
|
|
||||
# .ExternalHelp psake.psm1-help.xml |
|
||||
function Include { |
|
||||
[CmdletBinding()] |
|
||||
param( |
|
||||
[Parameter(Position=0,Mandatory=1)][string]$fileNamePathToInclude |
|
||||
) |
|
||||
Assert (test-path $fileNamePathToInclude -pathType Leaf) ($msgs.error_invalid_include_path -f $fileNamePathToInclude) |
|
||||
$psake.context.Peek().includes.Enqueue((Resolve-Path $fileNamePathToInclude)); |
|
||||
} |
|
||||
|
|
||||
# .ExternalHelp psake.psm1-help.xml |
|
||||
function FormatTaskName { |
|
||||
[CmdletBinding()] |
|
||||
param( |
|
||||
[Parameter(Position=0,Mandatory=1)]$format |
|
||||
) |
|
||||
$psake.context.Peek().config.taskNameFormat = $format |
|
||||
} |
|
||||
|
|
||||
# .ExternalHelp psake.psm1-help.xml |
|
||||
function TaskSetup { |
|
||||
[CmdletBinding()] |
|
||||
param( |
|
||||
[Parameter(Position=0,Mandatory=1)][scriptblock]$setup |
|
||||
) |
|
||||
$psake.context.Peek().taskSetupScriptBlock = $setup |
|
||||
} |
|
||||
|
|
||||
# .ExternalHelp psake.psm1-help.xml |
|
||||
function TaskTearDown { |
|
||||
[CmdletBinding()] |
|
||||
param( |
|
||||
[Parameter(Position=0,Mandatory=1)][scriptblock]$teardown |
|
||||
) |
|
||||
$psake.context.Peek().taskTearDownScriptBlock = $teardown |
|
||||
} |
|
||||
|
|
||||
# .ExternalHelp psake.psm1-help.xml |
|
||||
function Framework { |
|
||||
[CmdletBinding()] |
|
||||
param( |
|
||||
[Parameter(Position=0,Mandatory=1)][string]$framework |
|
||||
) |
|
||||
$psake.context.Peek().config.framework = $framework |
|
||||
ConfigureBuildEnvironment |
|
||||
} |
|
||||
|
|
||||
# .ExternalHelp psake.psm1-help.xml |
|
||||
function Invoke-psake { |
|
||||
[CmdletBinding()] |
|
||||
param( |
|
||||
[Parameter(Position = 0, Mandatory = 0)][string] $buildFile, |
|
||||
[Parameter(Position = 1, Mandatory = 0)][string[]] $taskList = @(), |
|
||||
[Parameter(Position = 2, Mandatory = 0)][string] $framework, |
|
||||
[Parameter(Position = 3, Mandatory = 0)][switch] $docs = $false, |
|
||||
[Parameter(Position = 4, Mandatory = 0)][hashtable] $parameters = @{}, |
|
||||
[Parameter(Position = 5, Mandatory = 0)][hashtable] $properties = @{}, |
|
||||
[Parameter(Position = 6, Mandatory = 0)][alias("init")][scriptblock] $initialization = {}, |
|
||||
[Parameter(Position = 7, Mandatory = 0)][switch] $nologo = $false |
|
||||
) |
|
||||
try { |
|
||||
if (-not $nologo) { |
|
||||
"psake version {0}`nCopyright (c) 2010 James Kovacs`n" -f $psake.version |
|
||||
} |
|
||||
|
|
||||
if (!$buildFile) { |
|
||||
$buildFile = $psake.config_default.buildFileName |
|
||||
} |
|
||||
elseif (!(test-path $buildFile -pathType Leaf) -and (test-path $psake.config_default.buildFileName -pathType Leaf)) { |
|
||||
# If the $config.buildFileName file exists and the given "buildfile" isn 't found assume that the given |
|
||||
# $buildFile is actually the target Tasks to execute in the $config.buildFileName script. |
|
||||
$taskList = $buildFile.Split(', ') |
|
||||
$buildFile = $psake.config_default.buildFileName |
|
||||
} |
|
||||
|
|
||||
# Execute the build file to set up the tasks and defaults |
|
||||
Assert (test-path $buildFile -pathType Leaf) ($msgs.error_build_file_not_found -f $buildFile) |
|
||||
|
|
||||
$psake.build_script_file = get-item $buildFile |
|
||||
$psake.build_script_dir = $psake.build_script_file.DirectoryName |
|
||||
$psake.build_success = $false |
|
||||
|
|
||||
$psake.context.push(@{ |
|
||||
"taskSetupScriptBlock" = {}; |
|
||||
"taskTearDownScriptBlock" = {}; |
|
||||
"executedTasks" = new-object System.Collections.Stack; |
|
||||
"callStack" = new-object System.Collections.Stack; |
|
||||
"originalEnvPath" = $env:path; |
|
||||
"originalDirectory" = get-location; |
|
||||
"originalErrorActionPreference" = $global:ErrorActionPreference; |
|
||||
"tasks" = @{}; |
|
||||
"aliases" = @{}; |
|
||||
"properties" = @(); |
|
||||
"includes" = new-object System.Collections.Queue; |
|
||||
"config" = CreateConfigurationForNewContext $buildFile $framework |
|
||||
}) |
|
||||
|
|
||||
LoadConfiguration $psake.build_script_dir |
|
||||
|
|
||||
$stopwatch = [System.Diagnostics.Stopwatch]::StartNew() |
|
||||
|
|
||||
set-location $psake.build_script_dir |
|
||||
|
|
||||
LoadModules |
|
||||
|
|
||||
$frameworkOldValue = $framework |
|
||||
. $psake.build_script_file.FullName |
|
||||
|
|
||||
$currentContext = $psake.context.Peek() |
|
||||
|
|
||||
if ($framework -ne $frameworkOldValue) { |
|
||||
writecoloredoutput $msgs.warning_deprecated_framework_variable -foregroundcolor Yellow |
|
||||
$currentContext.config.framework = $framework |
|
||||
} |
|
||||
|
|
||||
ConfigureBuildEnvironment |
|
||||
|
|
||||
while ($currentContext.includes.Count -gt 0) { |
|
||||
$includeFilename = $currentContext.includes.Dequeue() |
|
||||
. $includeFilename |
|
||||
} |
|
||||
|
|
||||
if ($docs) { |
|
||||
WriteDocumentation |
|
||||
CleanupEnvironment |
|
||||
return |
|
||||
} |
|
||||
|
|
||||
foreach ($key in $parameters.keys) { |
|
||||
if (test-path "variable:\$key") { |
|
||||
set-item -path "variable:\$key" -value $parameters.$key -WhatIf:$false -Confirm:$false | out-null |
|
||||
} else { |
|
||||
new-item -path "variable:\$key" -value $parameters.$key -WhatIf:$false -Confirm:$false | out-null |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
# The initial dot (.) indicates that variables initialized/modified in the propertyBlock are available in the parent scope. |
|
||||
foreach ($propertyBlock in $currentContext.properties) { |
|
||||
. $propertyBlock |
|
||||
} |
|
||||
|
|
||||
foreach ($key in $properties.keys) { |
|
||||
if (test-path "variable:\$key") { |
|
||||
set-item -path "variable:\$key" -value $properties.$key -WhatIf:$false -Confirm:$false | out-null |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
# Simple dot sourcing will not work. We have to force the script block into our |
|
||||
# module's scope in order to initialize variables properly. |
|
||||
. $MyInvocation.MyCommand.Module $initialization |
|
||||
|
|
||||
# Execute the list of tasks or the default task |
|
||||
if ($taskList) { |
|
||||
foreach ($task in $taskList) { |
|
||||
invoke-task $task |
|
||||
} |
|
||||
} elseif ($currentContext.tasks.default) { |
|
||||
invoke-task default |
|
||||
} else { |
|
||||
throw $msgs.error_no_default_task |
|
||||
} |
|
||||
|
|
||||
WriteColoredOutput ("`n" + $msgs.build_success + "`n") -foregroundcolor Green |
|
||||
|
|
||||
WriteTaskTimeSummary $stopwatch.Elapsed |
|
||||
|
|
||||
$psake.build_success = $true |
|
||||
} catch { |
|
||||
$currentConfig = GetCurrentConfigurationOrDefault |
|
||||
if ($currentConfig.verboseError) { |
|
||||
$error_message = "{0}: An Error Occurred. See Error Details Below: `n" -f (Get-Date) |
|
||||
$error_message += ("-" * 70) + "`n" |
|
||||
$error_message += "Error: {0}`n" -f (ResolveError $_ -Short) |
|
||||
$error_message += ("-" * 70) + "`n" |
|
||||
$error_message += ResolveError $_ |
|
||||
$error_message += ("-" * 70) + "`n" |
|
||||
$error_message += "Script Variables" + "`n" |
|
||||
$error_message += ("-" * 70) + "`n" |
|
||||
$error_message += get-variable -scope script | format-table | out-string |
|
||||
} else { |
|
||||
# ($_ | Out-String) gets error messages with source information included. |
|
||||
$error_message = "Error: {0}: `n{1}" -f (Get-Date), (ResolveError $_ -Short) |
|
||||
} |
|
||||
|
|
||||
$psake.build_success = $false |
|
||||
|
|
||||
# if we are running in a nested scope (i.e. running a psake script from a psake script) then we need to re-throw the exception |
|
||||
# so that the parent script will fail otherwise the parent script will report a successful build |
|
||||
$inNestedScope = ($psake.context.count -gt 1) |
|
||||
if ( $inNestedScope ) { |
|
||||
throw $_ |
|
||||
} else { |
|
||||
if (!$psake.run_by_psake_build_tester) { |
|
||||
WriteColoredOutput $error_message -foregroundcolor Red |
|
||||
} |
|
||||
} |
|
||||
} finally { |
|
||||
CleanupEnvironment |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
#-- Private Module Functions --# |
|
||||
function WriteColoredOutput { |
|
||||
param( |
|
||||
[string] $message, |
|
||||
[System.ConsoleColor] $foregroundcolor |
|
||||
) |
|
||||
|
|
||||
$currentConfig = GetCurrentConfigurationOrDefault |
|
||||
if ($currentConfig.coloredOutput -eq $true) { |
|
||||
if (($Host.UI -ne $null) -and ($Host.UI.RawUI -ne $null) -and ($Host.UI.RawUI.ForegroundColor -ne $null)) { |
|
||||
$previousColor = $Host.UI.RawUI.ForegroundColor |
|
||||
$Host.UI.RawUI.ForegroundColor = $foregroundcolor |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
$message |
|
||||
|
|
||||
if ($previousColor -ne $null) { |
|
||||
$Host.UI.RawUI.ForegroundColor = $previousColor |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
function LoadModules { |
|
||||
$currentConfig = $psake.context.peek().config |
|
||||
if ($currentConfig.modules) { |
|
||||
|
|
||||
$scope = $currentConfig.moduleScope |
|
||||
|
|
||||
$global = [string]::Equals($scope, "global", [StringComparison]::CurrentCultureIgnoreCase) |
|
||||
|
|
||||
$currentConfig.modules | foreach { |
|
||||
resolve-path $_ | foreach { |
|
||||
"Loading module: $_" |
|
||||
$module = import-module $_ -passthru -DisableNameChecking -global:$global |
|
||||
if (!$module) { |
|
||||
throw ($msgs.error_loading_module -f $_.Name) |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
"" |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
function LoadConfiguration { |
|
||||
param( |
|
||||
[string] $configdir = $PSScriptRoot |
|
||||
) |
|
||||
|
|
||||
$psakeConfigFilePath = (join-path $configdir "psake-config.ps1") |
|
||||
|
|
||||
if (test-path $psakeConfigFilePath -pathType Leaf) { |
|
||||
try { |
|
||||
$config = GetCurrentConfigurationOrDefault |
|
||||
. $psakeConfigFilePath |
|
||||
} catch { |
|
||||
throw "Error Loading Configuration from psake-config.ps1: " + $_ |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
function GetCurrentConfigurationOrDefault() { |
|
||||
if ($psake.context.count -gt 0) { |
|
||||
return $psake.context.peek().config |
|
||||
} else { |
|
||||
return $psake.config_default |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
function CreateConfigurationForNewContext { |
|
||||
param( |
|
||||
[string] $buildFile, |
|
||||
[string] $framework |
|
||||
) |
|
||||
|
|
||||
$previousConfig = GetCurrentConfigurationOrDefault |
|
||||
|
|
||||
$config = new-object psobject -property @{ |
|
||||
buildFileName = $previousConfig.buildFileName; |
|
||||
framework = $previousConfig.framework; |
|
||||
taskNameFormat = $previousConfig.taskNameFormat; |
|
||||
verboseError = $previousConfig.verboseError; |
|
||||
coloredOutput = $previousConfig.coloredOutput; |
|
||||
modules = $previousConfig.modules; |
|
||||
moduleScope = $previousConfig.moduleScope; |
|
||||
} |
|
||||
|
|
||||
if ($framework) { |
|
||||
$config.framework = $framework; |
|
||||
} |
|
||||
|
|
||||
if ($buildFile) { |
|
||||
$config.buildFileName = $buildFile; |
|
||||
} |
|
||||
|
|
||||
return $config |
|
||||
} |
|
||||
|
|
||||
function ConfigureBuildEnvironment { |
|
||||
$framework = $psake.context.peek().config.framework |
|
||||
if ($framework -cmatch '^((?:\d+\.\d+)(?:\.\d+){0,1})(x86|x64){0,1}$') { |
|
||||
$versionPart = $matches[1] |
|
||||
$bitnessPart = $matches[2] |
|
||||
} else { |
|
||||
throw ($msgs.error_invalid_framework -f $framework) |
|
||||
} |
|
||||
$versions = $null |
|
||||
$buildToolsVersions = $null |
|
||||
switch ($versionPart) { |
|
||||
'1.0' { |
|
||||
$versions = @('v1.0.3705') |
|
||||
} |
|
||||
'1.1' { |
|
||||
$versions = @('v1.1.4322') |
|
||||
} |
|
||||
'2.0' { |
|
||||
$versions = @('v2.0.50727') |
|
||||
} |
|
||||
'3.0' { |
|
||||
$versions = @('v2.0.50727') |
|
||||
} |
|
||||
'3.5' { |
|
||||
$versions = @('v3.5', 'v2.0.50727') |
|
||||
} |
|
||||
'4.0' { |
|
||||
$versions = @('v4.0.30319') |
|
||||
} |
|
||||
'4.5.1' { |
|
||||
$versions = @('v4.0.30319') |
|
||||
$buildToolsVersions = @('12.0') |
|
||||
} |
|
||||
default { |
|
||||
throw ($msgs.error_unknown_framework -f $versionPart, $framework) |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
$bitness = 'Framework' |
|
||||
if ($versionPart -ne '1.0' -and $versionPart -ne '1.1') { |
|
||||
switch ($bitnessPart) { |
|
||||
'x86' { |
|
||||
$bitness = 'Framework' |
|
||||
$buildToolsKey = 'MSBuildToolsPath32' |
|
||||
} |
|
||||
'x64' { |
|
||||
$bitness = 'Framework64' |
|
||||
$buildToolsKey = 'MSBuildToolsPath' |
|
||||
} |
|
||||
{ [string]::IsNullOrEmpty($_) } { |
|
||||
$ptrSize = [System.IntPtr]::Size |
|
||||
switch ($ptrSize) { |
|
||||
4 { |
|
||||
$bitness = 'Framework' |
|
||||
$buildToolsKey = 'MSBuildToolsPath32' |
|
||||
} |
|
||||
8 { |
|
||||
$bitness = 'Framework64' |
|
||||
$buildToolsKey = 'MSBuildToolsPath' |
|
||||
} |
|
||||
default { |
|
||||
throw ($msgs.error_unknown_pointersize -f $ptrSize) |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
default { |
|
||||
throw ($msgs.error_unknown_bitnesspart -f $bitnessPart, $framework) |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
$frameworkDirs = @() |
|
||||
if ($buildToolsVersions -ne $null) { |
|
||||
$frameworkDirs = @($buildToolsVersions | foreach { (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\$_" -Name $buildToolsKey).$buildToolsKey }) |
|
||||
} |
|
||||
$frameworkDirs = $frameworkDirs + @($versions | foreach { "$env:windir\Microsoft.NET\$bitness\$_\" }) |
|
||||
|
|
||||
for ($i = 0; $i -lt $frameworkDirs.Count; $i++) { |
|
||||
$dir = $frameworkDirs[$i] |
|
||||
if ($dir -Match "\$\(Registry:HKEY_LOCAL_MACHINE(.*?)@(.*)\)") { |
|
||||
$key = "HKLM:" + $matches[1] |
|
||||
$name = $matches[2] |
|
||||
$dir = (Get-ItemProperty -Path $key -Name $name).$name |
|
||||
$frameworkDirs[$i] = $dir |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
$frameworkDirs | foreach { Assert (test-path $_ -pathType Container) ($msgs.error_no_framework_install_dir_found -f $_)} |
|
||||
|
|
||||
$env:path = ($frameworkDirs -join ";") + ";$env:path" |
|
||||
# if any error occurs in a PS function then "stop" processing immediately |
|
||||
# this does not effect any external programs that return a non-zero exit code |
|
||||
$global:ErrorActionPreference = "Stop" |
|
||||
} |
|
||||
|
|
||||
function CleanupEnvironment { |
|
||||
if ($psake.context.Count -gt 0) { |
|
||||
$currentContext = $psake.context.Peek() |
|
||||
$env:path = $currentContext.originalEnvPath |
|
||||
Set-Location $currentContext.originalDirectory |
|
||||
$global:ErrorActionPreference = $currentContext.originalErrorActionPreference |
|
||||
[void] $psake.context.Pop() |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
function SelectObjectWithDefault |
|
||||
{ |
|
||||
[CmdletBinding()] |
|
||||
param( |
|
||||
[Parameter(ValueFromPipeline=$true)] |
|
||||
[PSObject] |
|
||||
$InputObject, |
|
||||
[string] |
|
||||
$Name, |
|
||||
$Value |
|
||||
) |
|
||||
|
|
||||
process { |
|
||||
if ($_ -eq $null) { $Value } |
|
||||
elseif ($_ | Get-Member -Name $Name) { |
|
||||
$_.$Name |
|
||||
} |
|
||||
elseif (($_ -is [Hashtable]) -and ($_.Keys -contains $Name)) { |
|
||||
$_.$Name |
|
||||
} |
|
||||
else { $Value } |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
# borrowed from Jeffrey Snover http://blogs.msdn.com/powershell/archive/2006/12/07/resolve-error.aspx |
|
||||
# modified to better handle SQL errors |
|
||||
function ResolveError |
|
||||
{ |
|
||||
[CmdletBinding()] |
|
||||
param( |
|
||||
[Parameter(ValueFromPipeline=$true)] |
|
||||
$ErrorRecord=$Error[0], |
|
||||
[Switch] |
|
||||
$Short |
|
||||
) |
|
||||
|
|
||||
process { |
|
||||
if ($_ -eq $null) { $_ = $ErrorRecord } |
|
||||
$ex = $_.Exception |
|
||||
|
|
||||
if (-not $Short) { |
|
||||
$error_message = "`nErrorRecord:{0}ErrorRecord.InvocationInfo:{1}Exception:`n{2}" |
|
||||
$formatted_errorRecord = $_ | format-list * -force | out-string |
|
||||
$formatted_invocationInfo = $_.InvocationInfo | format-list * -force | out-string |
|
||||
$formatted_exception = '' |
|
||||
|
|
||||
$i = 0 |
|
||||
while ($ex -ne $null) { |
|
||||
$i++ |
|
||||
$formatted_exception += ("$i" * 70) + "`n" + |
|
||||
($ex | format-list * -force | out-string) + "`n" |
|
||||
$ex = $ex | SelectObjectWithDefault -Name 'InnerException' -Value $null |
|
||||
} |
|
||||
|
|
||||
return $error_message -f $formatted_errorRecord, $formatted_invocationInfo, $formatted_exception |
|
||||
} |
|
||||
|
|
||||
$lastException = @() |
|
||||
while ($ex -ne $null) { |
|
||||
$lastMessage = $ex | SelectObjectWithDefault -Name 'Message' -Value '' |
|
||||
$lastException += ($lastMessage -replace "`n", '') |
|
||||
if ($ex -is [Data.SqlClient.SqlException]) { |
|
||||
$lastException += "(Line [$($ex.LineNumber)] " + |
|
||||
"Procedure [$($ex.Procedure)] Class [$($ex.Class)] " + |
|
||||
" Number [$($ex.Number)] State [$($ex.State)] )" |
|
||||
} |
|
||||
$ex = $ex | SelectObjectWithDefault -Name 'InnerException' -Value $null |
|
||||
} |
|
||||
$shortException = $lastException -join ' --> ' |
|
||||
|
|
||||
$header = $null |
|
||||
$current = $_ |
|
||||
$header = (($_.InvocationInfo | |
|
||||
SelectObjectWithDefault -Name 'PositionMessage' -Value '') -replace "`n", ' '), |
|
||||
($_ | SelectObjectWithDefault -Name 'Message' -Value ''), |
|
||||
($_ | SelectObjectWithDefault -Name 'Exception' -Value '') | |
|
||||
? { -not [String]::IsNullOrEmpty($_) } | |
|
||||
Select -First 1 |
|
||||
|
|
||||
$delimiter = '' |
|
||||
if ((-not [String]::IsNullOrEmpty($header)) -and |
|
||||
(-not [String]::IsNullOrEmpty($shortException))) |
|
||||
{ $delimiter = ' [<<==>>] ' } |
|
||||
|
|
||||
return "$($header)$($delimiter)Exception: $($shortException)" |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
function WriteDocumentation { |
|
||||
$currentContext = $psake.context.Peek() |
|
||||
|
|
||||
if ($currentContext.tasks.default) { |
|
||||
$defaultTaskDependencies = $currentContext.tasks.default.DependsOn |
|
||||
} else { |
|
||||
$defaultTaskDependencies = @() |
|
||||
} |
|
||||
|
|
||||
$currentContext.tasks.Keys | foreach-object { |
|
||||
if ($_ -eq "default") { |
|
||||
return |
|
||||
} |
|
||||
|
|
||||
$task = $currentContext.tasks.$_ |
|
||||
new-object PSObject -property @{ |
|
||||
Name = $task.Name; |
|
||||
Alias = $task.Alias; |
|
||||
Description = $task.Description; |
|
||||
"Depends On" = $task.DependsOn -join ", " |
|
||||
Default = if ($defaultTaskDependencies -contains $task.Name) { $true } |
|
||||
} |
|
||||
} | sort 'Name' | format-table -autoSize -wrap -property Name,Alias,"Depends On",Default,Description |
|
||||
} |
|
||||
|
|
||||
function WriteTaskTimeSummary($invokePsakeDuration) { |
|
||||
"-" * 70 |
|
||||
"Build Time Report" |
|
||||
"-" * 70 |
|
||||
$list = @() |
|
||||
$currentContext = $psake.context.Peek() |
|
||||
while ($currentContext.executedTasks.Count -gt 0) { |
|
||||
$taskKey = $currentContext.executedTasks.Pop() |
|
||||
$task = $currentContext.tasks.$taskKey |
|
||||
if ($taskKey -eq "default") { |
|
||||
continue |
|
||||
} |
|
||||
$list += new-object PSObject -property @{ |
|
||||
Name = $task.Name; |
|
||||
Duration = $task.Duration |
|
||||
} |
|
||||
} |
|
||||
[Array]::Reverse($list) |
|
||||
$list += new-object PSObject -property @{ |
|
||||
Name = "Total:"; |
|
||||
Duration = $invokePsakeDuration |
|
||||
} |
|
||||
# using "out-string | where-object" to filter out the blank line that format-table prepends |
|
||||
$list | format-table -autoSize -property Name,Duration | out-string -stream | where-object { $_ } |
|
||||
} |
|
||||
|
|
||||
DATA msgs { |
|
||||
convertfrom-stringdata @' |
|
||||
error_invalid_task_name = Task name should not be null or empty string. |
|
||||
error_task_name_does_not_exist = Task {0} does not exist. |
|
||||
error_circular_reference = Circular reference found for task {0}. |
|
||||
error_missing_action_parameter = Action parameter must be specified when using PreAction or PostAction parameters for task {0}. |
|
||||
error_corrupt_callstack = Call stack was corrupt. Expected {0}, but got {1}. |
|
||||
error_invalid_framework = Invalid .NET Framework version, {0} specified. |
|
||||
error_unknown_framework = Unknown .NET Framework version, {0} specified in {1}. |
|
||||
error_unknown_pointersize = Unknown pointer size ({0}) returned from System.IntPtr. |
|
||||
error_unknown_bitnesspart = Unknown .NET Framework bitness, {0}, specified in {1}. |
|
||||
error_no_framework_install_dir_found = No .NET Framework installation directory found at {0}. |
|
||||
error_bad_command = Error executing command {0}. |
|
||||
error_default_task_cannot_have_action = 'default' task cannot specify an action. |
|
||||
error_duplicate_task_name = Task {0} has already been defined. |
|
||||
error_duplicate_alias_name = Alias {0} has already been defined. |
|
||||
error_invalid_include_path = Unable to include {0}. File not found. |
|
||||
error_build_file_not_found = Could not find the build file {0}. |
|
||||
error_no_default_task = 'default' task required. |
|
||||
error_loading_module = Error loading module {0}. |
|
||||
warning_deprecated_framework_variable = Warning: Using global variable $framework to set .NET framework version used is deprecated. Instead use Framework function or configuration file psake-config.ps1. |
|
||||
required_variable_not_set = Variable {0} must be set to run task {1}. |
|
||||
postcondition_failed = Postcondition failed for task {0}. |
|
||||
precondition_was_false = Precondition was false, not executing task {0}. |
|
||||
continue_on_error = Error in task {0}. {1} |
|
||||
build_success = Build Succeeded! |
|
||||
'@ |
|
||||
} |
|
||||
|
|
||||
import-localizeddata -bindingvariable msgs -erroraction silentlycontinue |
|
||||
|
|
||||
$script:psake = @{} |
|
||||
$psake.version = "4.3.2" # contains the current version of psake |
|
||||
$psake.context = new-object system.collections.stack # holds onto the current state of all variables |
|
||||
$psake.run_by_psake_build_tester = $false # indicates that build is being run by psake-BuildTester |
|
||||
$psake.config_default = new-object psobject -property @{ |
|
||||
buildFileName = "default.ps1"; |
|
||||
framework = "4.0"; |
|
||||
taskNameFormat = "Executing {0}"; |
|
||||
verboseError = $false; |
|
||||
coloredOutput = $true; |
|
||||
modules = $null; |
|
||||
moduleScope = ""; |
|
||||
} # contains default configuration, can be overriden in psake-config.ps1 in directory with psake.psm1 or in directory with current build script |
|
||||
|
|
||||
$psake.build_success = $false # indicates that the current build was successful |
|
||||
$psake.build_script_file = $null # contains a System.IO.FileInfo for the current build script |
|
||||
$psake.build_script_dir = "" # contains a string with fully-qualified path to current build script |
|
||||
|
|
||||
LoadConfiguration |
|
||||
|
|
||||
export-modulemember -function Invoke-psake, Invoke-Task, Task, Properties, Include, FormatTaskName, TaskSetup, TaskTearDown, Framework, Assert, Exec -variable psake |
|
||||
@ -1 +0,0 @@ |
|||||
75c3885b6db49741cd7c7efe3bda996c2fae5ae7 |
|
||||
@ -1,7 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8" ?> |
|
||||
<!-- https://github.com/JatechUK/NUnit-HTML-Report-Generator --> |
|
||||
<configuration> |
|
||||
<startup> |
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> |
|
||||
</startup> |
|
||||
</configuration> |
|
||||
@ -1 +0,0 @@ |
|||||
d3fa096caf69385df6771dd68981b46e5e9193e1 |
|
||||
@ -1 +0,0 @@ |
|||||
a8e84e553b884b6bd2ea01cf8ba12631b6788b1e |
|
||||
@ -1 +0,0 @@ |
|||||
76e95d1e37dd5508a872071da057a2a74d14a833 |
|
||||
@ -1,3 +0,0 @@ |
|||||
<?xml version="1.0"?> |
|
||||
<configuration> |
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration> |
|
||||
@ -1,82 +0,0 @@ |
|||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> |
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
|
||||
<head> |
|
||||
<!--[if lt IE 9]> |
|
||||
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> |
|
||||
<![endif]--> |
|
||||
<title>${h(Type.PrettyName)} - ${WriteProductName(Assemblies[0])} Documentation</title> |
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> |
|
||||
<link type="text/css" rel="stylesheet" href="../main.css" /> |
|
||||
<script type="text/javascript" src="../js/jquery-1.3.2.min.js"></script> |
|
||||
<script type="text/javascript" src="../js/jquery.scrollTo-min.js"></script> |
|
||||
<script type="text/javascript" src="../js/navigation.js"></script> |
|
||||
<script type="text/javascript" src="../js/example.js"></script> |
|
||||
</head> |
|
||||
<body> |
|
||||
<header><h1>${WriteProductName(Assemblies[0])} : API Documentation</h1> |
|
||||
</header> |
|
||||
|
|
||||
<namespaces /> |
|
||||
<types /> |
|
||||
<article> |
|
||||
<header> |
|
||||
<p class="class"><strong>Type</strong> ${h(Type.PrettyName)}</p> |
|
||||
</header> |
|
||||
<section> |
|
||||
<header> |
|
||||
<p><strong>Namespace</strong> ${Namespace.Name}</p> |
|
||||
<p if="Type.ParentType != null && Type.ParentType.PrettyName != 'object'"><strong>Parent</strong> ${Format(Type.ParentType)}</p> |
|
||||
<p if="Type.Interfaces.Count > 0"><strong>Interfaces</strong> ${WriteInterfaces(Type.Interfaces)}</p> |
|
||||
</header> |
|
||||
<div class="sub-header"> |
|
||||
<if condition="(Type.Summary != null && Type.Summary.Children.Count() > 0) || (Type.Remarks != null && Type.Remarks.Children.Count() > 0)"> |
|
||||
<div id="summary"> |
|
||||
<comment content="Type.Summary" /> |
|
||||
<remarks content="Type.Remarks" /> |
|
||||
<example content="Type.Example" /> |
|
||||
</div> |
|
||||
</if> |
|
||||
|
|
||||
<if condition="Type.Events.Count > 0"> |
|
||||
<h3 class="section">Events</h3> |
|
||||
<ul> |
|
||||
<li each="var ev in Type.Events">${Format(ev)}</li> |
|
||||
</ul> |
|
||||
</if> |
|
||||
|
|
||||
<if condition="Type.Methods.Count > 0"> |
|
||||
<h3 class="section">Methods</h3> |
|
||||
<ul> |
|
||||
<li each="var method in Type.Methods">${Format(method)}</li> |
|
||||
</ul> |
|
||||
</if> |
|
||||
|
|
||||
<if condition="Type.Properties.Count > 0"> |
|
||||
<h3 class="section">Properties</h3> |
|
||||
<ul> |
|
||||
<li each="var property in Type.Properties">${Format(property)}</li> |
|
||||
</ul> |
|
||||
</if> |
|
||||
|
|
||||
<if condition="Type.Fields.Count > 0"> |
|
||||
<h3 class="section">Fields</h3> |
|
||||
<ul> |
|
||||
<li each="var field in Type.Fields">${Format(field)}</li> |
|
||||
</ul> |
|
||||
</if> |
|
||||
</div> |
|
||||
<events events="Type.Events" title="'Events'" /> |
|
||||
|
|
||||
<var publicInstanceMethods="Type.Methods.Where(x => x.IsPublic && !x.IsStatic)" /> |
|
||||
<methods methods="publicInstanceMethods" title="'Public instance methods'" /> |
|
||||
|
|
||||
<var publicStaticMethods="Type.Methods.Where(x => x.IsPublic && x.IsStatic)" /> |
|
||||
<methods methods="publicStaticMethods" title="'Public static methods'" /> |
|
||||
|
|
||||
<properties properties="Type.Properties" title="'Public properties'" /> |
|
||||
<fields fields="Type.Fields" title="'Public fields'" /> |
|
||||
</section> |
|
||||
</article> |
|
||||
<use file="../_common_footer" /> |
|
||||
</body> |
|
||||
</html> |
|
||||
@ -1 +0,0 @@ |
|||||
${Format(content)} |
|
||||
@ -1,12 +0,0 @@ |
|||||
<if condition="events.Count() > 0"> |
|
||||
<h3 class="section">${title}</h3> |
|
||||
|
|
||||
<div id="${ev.Name}" class="method" each="var ev in events"> |
|
||||
<h4><strong>${h(ev.Name)}</strong></h4> |
|
||||
<div class="content"> |
|
||||
<comment content="ev.Summary" /> |
|
||||
<remarks content="ev.Remarks" /> |
|
||||
<example content="ev.Example" /> |
|
||||
</div> |
|
||||
</div> |
|
||||
</if> |
|
||||
@ -1,4 +0,0 @@ |
|||||
<div class="example" if="content != null && content.Children.Count() > 0"> |
|
||||
<a href="javascript:void(0)">Show Example</a> |
|
||||
<pre>${Format(content)}</pre> |
|
||||
</div> |
|
||||
@ -1,19 +0,0 @@ |
|||||
<if condition="fields.Count() > 0"> |
|
||||
<h3 class="section">${title}</h3> |
|
||||
|
|
||||
<div id="${field.Name}" class="method" each="var field in fields"> |
|
||||
<h4>${h(field.ReturnType.PrettyName)} <strong>${h(field.Name)}</strong></h4> |
|
||||
<div class="content"> |
|
||||
<comment content="field.Summary" /> |
|
||||
<remarks content="field.Remarks" /> |
|
||||
<table> |
|
||||
<tr> |
|
||||
<td> |
|
||||
<code>return ${Format(field.ReturnType)}</code> |
|
||||
</td> |
|
||||
</tr> |
|
||||
</table> |
|
||||
<example content="field.Example" /> |
|
||||
</div> |
|
||||
</div> |
|
||||
</if> |
|
||||
@ -1,46 +0,0 @@ |
|||||
<if condition="methods.Count() > 0"> |
|
||||
<h3 class="section">${title}</h3> |
|
||||
|
|
||||
<div id="${method.Name}" class="method" each="var method in methods"> |
|
||||
<h4> |
|
||||
${Format(method.ReturnType)} <strong>${h(method.PrettyName)}</strong>(${OutputMethodParams(method)}) |
|
||||
</h4> |
|
||||
<div class="content"> |
|
||||
<comment content="method.Summary" /> |
|
||||
<remarks content="method.Remarks" /> |
|
||||
|
|
||||
<var hasReturn="method.ReturnType.PrettyName != 'void'" /> |
|
||||
<var hasParams="method.Parameters.Any(x => x.HasDocumentation)" /> |
|
||||
|
|
||||
<div class="parameters" if="hasParams"> |
|
||||
<h5>Parameters</h5> |
|
||||
<dl> |
|
||||
<for each="var param in method.Parameters"> |
|
||||
<dt> |
|
||||
<code>${Format(param.Reference)}</code> ${param.Name} |
|
||||
</dt> |
|
||||
<dd if="!param.Summary.IsEmpty"> |
|
||||
<comment content="param.Summary" /> |
|
||||
</dd> |
|
||||
</for> |
|
||||
</dl> |
|
||||
</div> |
|
||||
|
|
||||
<div class="return" if="!method.Returns.IsEmpty"> |
|
||||
|
|
||||
<h5>Returns</h5> |
|
||||
<dl> |
|
||||
<dt> |
|
||||
<code>${Format(method.ReturnType)}</code> |
|
||||
</dt> |
|
||||
<dd> |
|
||||
<comment content="method.Returns" /> |
|
||||
</dd> |
|
||||
</dl> |
|
||||
</div> |
|
||||
|
|
||||
<value content="method.Value" /> |
|
||||
<example content="method.Example" /> |
|
||||
</div> |
|
||||
</div> |
|
||||
</if> |
|
||||
@ -1,14 +0,0 @@ |
|||||
<nav id="namespaces"> |
|
||||
<h2 class="fixed">Namespaces</h2> |
|
||||
<div class="scroll"> |
|
||||
<ul> |
|
||||
<li each="var ns in Namespaces"> |
|
||||
<if condition="ns == Namespace"> |
|
||||
${Format(ns, class => "current")} |
|
||||
<else /> |
|
||||
${Format(ns)} |
|
||||
</if> |
|
||||
</li> |
|
||||
</ul> |
|
||||
</div> |
|
||||
</nav> |
|
||||
@ -1,27 +0,0 @@ |
|||||
<if condition="properties.Count() > 0"> |
|
||||
<h3 class="section">${title}</h3> |
|
||||
|
|
||||
<div id="${property.Name}" class="method" each="var property in properties"> |
|
||||
<h4> |
|
||||
${Format(property.ReturnType)} <strong>${h(property.Name)}</strong> <if condition="property.HasGet">get;</if> <if condition="property.HasSet">set;</if> |
|
||||
</h4> |
|
||||
<div class="content"> |
|
||||
<comment content="property.Summary" /> |
|
||||
<remarks content="property.Remarks" /> |
|
||||
|
|
||||
<div class="return" if="property.ReturnType.HasDocumentation"> |
|
||||
<h5>Property type</h5> |
|
||||
<dl> |
|
||||
<dt> |
|
||||
<code>${Format(property.ReturnType)}</code> |
|
||||
</dt> |
|
||||
<dd> |
|
||||
<comment content="property.ReturnType.Summary" /> |
|
||||
</dd> |
|
||||
</dl> |
|
||||
</div> |
|
||||
<value content="property.Value" /> |
|
||||
<example content="property.Example" /> |
|
||||
</div> |
|
||||
</div> |
|
||||
</if> |
|
||||
@ -1,3 +0,0 @@ |
|||||
<blockquote class="remarks" if="content != null && content.Children.Count() > 0"> |
|
||||
${Format(content)} |
|
||||
</blockquote> |
|
||||
@ -1,14 +0,0 @@ |
|||||
<nav id="types"> |
|
||||
<h2 class="fixed">Types in ${Namespace.PrettyName}</h2> |
|
||||
<div class="scroll"> |
|
||||
<ul> |
|
||||
<li each="var type in Namespace.Types"> |
|
||||
<if condition="type == Type"> |
|
||||
${Format(type, class => "current")} |
|
||||
<else /> |
|
||||
${Format(type)} |
|
||||
</if> |
|
||||
</li> |
|
||||
</ul> |
|
||||
</div> |
|
||||
</nav> |
|
||||
@ -1,3 +0,0 @@ |
|||||
<blockquote class="value" if="content.Children.Count() > 0"> |
|
||||
<strong>Value: </strong>${Format(content)} |
|
||||
</blockquote> |
|
||||
@ -1,49 +0,0 @@ |
|||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> |
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
|
||||
<head> |
|
||||
<!--[if lt IE 9]> |
|
||||
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> |
|
||||
<![endif]--> |
|
||||
|
|
||||
<title>${Namespace.Name} - ${WriteProductName(Assemblies[0])} Documentation</title> |
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> |
|
||||
<link type="text/css" rel="stylesheet" href="../main.css" /> |
|
||||
<script type="text/javascript" src="../js/jquery-1.3.2.min.js"></script> |
|
||||
<script type="text/javascript" src="../js/jquery.scrollTo-min.js"></script> |
|
||||
<script type="text/javascript" src="../js/navigation.js"></script> |
|
||||
</head> |
|
||||
<body> |
|
||||
<header><h1>${WriteProductName(Assemblies[0])} : API Documentation</h1> |
|
||||
</header> |
|
||||
<namespaces /> |
|
||||
<types /> |
|
||||
<article> |
|
||||
<header> |
|
||||
<p class="class"><strong>Namespace</strong> ${Namespace.Name}</p> |
|
||||
</header> |
|
||||
<section> |
|
||||
<div class="sub-header"> |
|
||||
<if condition="Namespace.HasClasses"> |
|
||||
<h3 class="section">Classes</h3> |
|
||||
<ul> |
|
||||
<for each="var type in Namespace.Classes"> |
|
||||
<li>${Format(type)}</li> |
|
||||
</for> |
|
||||
</ul> |
|
||||
</if> |
|
||||
|
|
||||
<if condition="Namespace.HasInterfaces"> |
|
||||
<h3 class="section">Interfaces</h3> |
|
||||
<ul> |
|
||||
<for each="var type in Namespace.Interfaces"> |
|
||||
<li>${Format(type)}</li> |
|
||||
</for> |
|
||||
</ul> |
|
||||
</if> |
|
||||
<p if="!Namespace.HasTypes">This namespace is empty.</p> |
|
||||
</div> |
|
||||
</section> |
|
||||
</article> |
|
||||
<use file="../_common_footer" /> |
|
||||
</body> |
|
||||
</html> |
|
||||
@ -1,6 +0,0 @@ |
|||||
<footer> |
|
||||
<span id="version">Built from v${WriteVersion(Assemblies[0])} of ${WriteAssemblyTitle(Assemblies[0])}</span> |
|
||||
<span id="docu-link"> |
|
||||
Generated by <a href="http://docu.jagregory.com">docu</a> |
|
||||
</span> |
|
||||
</footer> |
|
||||
@ -1,8 +0,0 @@ |
|||||
<nav id="namespaces"> |
|
||||
<h2 class="fixed">Namespaces</h2> |
|
||||
<div class="scroll"> |
|
||||
<ul> |
|
||||
<li each="var ns in Namespaces">${Format(ns)}</li> |
|
||||
</ul> |
|
||||
</div> |
|
||||
</nav> |
|
||||
@ -1,10 +0,0 @@ |
|||||
<nav id="types"> |
|
||||
<h2 class="fixed">All Types</h2> |
|
||||
<div class="scroll"> |
|
||||
<ul> |
|
||||
<for each="var ns in Namespaces"> |
|
||||
<li each="var type in ns.Types">${Format(type)}</li> |
|
||||
</for> |
|
||||
</ul> |
|
||||
</div> |
|
||||
</nav> |
|
||||
@ -1,23 +0,0 @@ |
|||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> |
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
|
||||
<head> |
|
||||
<!--[if lt IE 9]> |
|
||||
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> |
|
||||
<![endif]--> |
|
||||
<title>${WriteProductName(Assemblies[0])} API Documentation</title> |
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> |
|
||||
<link type="text/css" rel="stylesheet" href="main.css" /> |
|
||||
</head> |
|
||||
<body> |
|
||||
<header><h1>${WriteProductName(Assemblies[0])} : API Documentation</h1> |
|
||||
</header> |
|
||||
<namespaces /> |
|
||||
<types /> |
|
||||
<article> |
|
||||
<header> |
|
||||
<p class="class">${WriteProductName(Assemblies[0])} Documentation</p> |
|
||||
</header> |
|
||||
</article> |
|
||||
<use file="_common_footer" /> |
|
||||
</body> |
|
||||
</html> |
|
||||
@ -1,21 +0,0 @@ |
|||||
$(document).ready(function() { |
|
||||
$('div.example').each(function(i, div) { |
|
||||
var a = $('a', div); |
|
||||
var pre = $('pre', div); |
|
||||
|
|
||||
a.pre = pre; |
|
||||
a.preVisible = false; |
|
||||
pre.hide(); |
|
||||
a.click(function() { |
|
||||
if (a.preVisible) { |
|
||||
a.pre.hide(); |
|
||||
a.text('Show Example'); |
|
||||
a.preVisible = false; |
|
||||
} else { |
|
||||
a.pre.show(); |
|
||||
a.text('Hide Example'); |
|
||||
a.preVisible = true; |
|
||||
} |
|
||||
}); |
|
||||
}); |
|
||||
}); |
|
||||
@ -1,11 +0,0 @@ |
|||||
/** |
|
||||
* jQuery.ScrollTo - Easy element scrolling using jQuery. |
|
||||
* Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
|
|
||||
* Dual licensed under MIT and GPL. |
|
||||
* Date: 5/25/2009 |
|
||||
* @author Ariel Flesler |
|
||||
* @version 1.4.2 |
|
||||
* |
|
||||
* http://flesler.blogspot.com/2007/10/jqueryscrollto.html
|
|
||||
*/ |
|
||||
;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery); |
|
||||
@ -1,11 +0,0 @@ |
|||||
$(document).ready(function() { |
|
||||
var scroll = function(selector) { |
|
||||
var currentItem = $(selector + ' .current'); |
|
||||
|
|
||||
if (currentItem) |
|
||||
$(selector + ' div.scroll').scrollTo(currentItem); |
|
||||
}; |
|
||||
|
|
||||
scroll('#namespaces'); |
|
||||
scroll('#types'); |
|
||||
}); |
|
||||
@ -1,263 +0,0 @@ |
|||||
/* HTML5 ? Boilerplate */ |
|
||||
|
|
||||
html, body, div, span, object, iframe, |
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre, |
|
||||
abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, |
|
||||
small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, |
|
||||
fieldset, form, label, legend, |
|
||||
table, caption, tbody, tfoot, thead, tr, th, td, |
|
||||
article, aside, canvas, details, figcaption, figure, |
|
||||
footer, header, hgroup, menu, nav, section, summary, |
|
||||
time, mark, audio, video { |
|
||||
margin: 0; |
|
||||
padding: 0; |
|
||||
border: 0; |
|
||||
font-size: 100%; |
|
||||
font: inherit; |
|
||||
vertical-align: baseline; |
|
||||
} |
|
||||
|
|
||||
article, aside, details, figcaption, figure, |
|
||||
footer, header, hgroup, menu, nav, section { |
|
||||
display: block; |
|
||||
} |
|
||||
|
|
||||
blockquote, q { quotes: none; } |
|
||||
blockquote:before, blockquote:after, |
|
||||
q:before, q:after { content: ""; content: none; } |
|
||||
ins { background-color: #ff9; color: #000; text-decoration: none; } |
|
||||
mark { background-color: #ff9; color: #000; font-style: italic; font-weight: bold; } |
|
||||
del { text-decoration: line-through; } |
|
||||
abbr[title], dfn[title] { border-bottom: 1px dotted; cursor: help; } |
|
||||
table { border-collapse: collapse; border-spacing: 0; } |
|
||||
hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; } |
|
||||
input, select { vertical-align: middle; } |
|
||||
|
|
||||
body { font:13px/1.231 sans-serif; } |
|
||||
select, input, textarea, button { font:99% sans-serif; } |
|
||||
pre, code, kbd, samp { font-family: monospace, sans-serif; } |
|
||||
|
|
||||
html { overflow-y: scroll; } |
|
||||
a:hover, a:active { outline: none; } |
|
||||
ul, ol { margin-left: 2em; } |
|
||||
ol { list-style-type: decimal; } |
|
||||
nav ul, nav li { margin: 0; list-style:none; list-style-image: none; } |
|
||||
small { font-size: 85%; } |
|
||||
strong, th { font-weight: bold; } |
|
||||
td { vertical-align: top; } |
|
||||
sub, sup { font-size: 75%; line-height: 0; position: relative; } |
|
||||
sup { top: -0.5em; } |
|
||||
sub { bottom: -0.25em; } |
|
||||
|
|
||||
pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; padding: 15px; } |
|
||||
textarea { overflow: auto; } |
|
||||
.ie6 legend, .ie7 legend { margin-left: -7px; } |
|
||||
input[type="radio"] { vertical-align: text-bottom; } |
|
||||
input[type="checkbox"] { vertical-align: bottom; } |
|
||||
.ie7 input[type="checkbox"] { vertical-align: baseline; } |
|
||||
.ie6 input { vertical-align: text-bottom; } |
|
||||
label, input[type="button"], input[type="submit"], input[type="image"], button { cursor: pointer; } |
|
||||
button, input, select, textarea { margin: 0; } |
|
||||
input:valid, textarea:valid { } |
|
||||
input:invalid, textarea:invalid { -moz-box-shadow: 0px 0px 5px red; -webkit-box-shadow: 0px 0px 5px red; } |
|
||||
.no-boxshadow input:invalid, .no-boxshadow textarea:invalid { background-color: #f0dddd; } |
|
||||
|
|
||||
|
|
||||
::-moz-selection{ background: #FF5E99; color:#fff; } |
|
||||
::selection { background:#FF5E99; color:#fff; } |
|
||||
a:link { -webkit-tap-highlight-color: #FF5E99; } |
|
||||
button { width: auto; overflow: visible; } |
|
||||
.ie7 img { -ms-interpolation-mode: bicubic; } |
|
||||
|
|
||||
h1, h2, h3, h4, h5, h6 { font-weight: bold; } |
|
||||
a, a:active, a:visited { color: #607890; } |
|
||||
a:hover { color: #036; } |
|
||||
|
|
||||
|
|
||||
/** |
|
||||
* Primary styles |
|
||||
* |
|
||||
* Author: Dylan Beattie (dylan@dylanbeattie.net) |
|
||||
*/ |
|
||||
|
|
||||
body > header { |
|
||||
position: absolute; |
|
||||
left: 8px; |
|
||||
right: 8px; |
|
||||
top: 8px; |
|
||||
height: 16px; |
|
||||
padding: 4px; |
|
||||
border: 1px solid #333333; |
|
||||
} |
|
||||
|
|
||||
body > header > span#project-link { |
|
||||
position: absolute; |
|
||||
right: 4px; |
|
||||
top: 4px; |
|
||||
} |
|
||||
|
|
||||
body { |
|
||||
background-color: #999999; |
|
||||
} |
|
||||
nav { |
|
||||
padding: 0px; |
|
||||
} |
|
||||
div.scroll { |
|
||||
padding: 4px; |
|
||||
overflow: auto; |
|
||||
position: absolute; |
|
||||
top: 24px; |
|
||||
bottom: 0px; |
|
||||
left: 0px; |
|
||||
right: 0px; |
|
||||
background-color: #fff; |
|
||||
} |
|
||||
|
|
||||
div.scroll ul li { |
|
||||
padding: 2px 0px; |
|
||||
} |
|
||||
div.scroll ul li a { |
|
||||
text-decoration: none; |
|
||||
} |
|
||||
nav#namespaces { |
|
||||
position: absolute; |
|
||||
top: 42px; |
|
||||
left: 8px; |
|
||||
bottom: 8px; |
|
||||
width: 384px; |
|
||||
overflow: hidden; |
|
||||
} |
|
||||
|
|
||||
nav#types { |
|
||||
position: absolute; |
|
||||
top: 42px; |
|
||||
right: 8px; |
|
||||
left: 400px; |
|
||||
height: 204px; |
|
||||
background-color: #fff; |
|
||||
overflow: hidden; |
|
||||
} |
|
||||
|
|
||||
article { |
|
||||
position: absolute; |
|
||||
left: 400px; |
|
||||
top: 256px; |
|
||||
bottom: 40px; |
|
||||
right: 8px; |
|
||||
background-color: #fff; |
|
||||
} |
|
||||
footer { |
|
||||
position: absolute; |
|
||||
left: 400px; |
|
||||
bottom: 8px; |
|
||||
height: 16px; |
|
||||
right: 8px; |
|
||||
background-color: #aaaaaa; |
|
||||
padding: 4px; |
|
||||
font-size: 80%; |
|
||||
} |
|
||||
|
|
||||
header { |
|
||||
background-color: #cccccc; |
|
||||
} |
|
||||
header p { |
|
||||
padding: 4px; |
|
||||
} |
|
||||
|
|
||||
nav h2, header p.class { |
|
||||
background-color: #333333; |
|
||||
padding: 4px; |
|
||||
color: #fff; |
|
||||
} |
|
||||
|
|
||||
article section { |
|
||||
position: absolute; |
|
||||
top: 24px; |
|
||||
bottom: 0px; |
|
||||
left: 0px; |
|
||||
right: 0px; |
|
||||
overflow:auto; |
|
||||
} |
|
||||
|
|
||||
section ul li { |
|
||||
margin: 4px 0px; |
|
||||
} |
|
||||
article section header p { margin: 0px; } |
|
||||
article section h3, article section p { |
|
||||
padding: 4px; |
|
||||
margin: 4px 0px; |
|
||||
} |
|
||||
article section h3 { |
|
||||
font-size: 120%; |
|
||||
} |
|
||||
div.method { |
|
||||
padding: 4px 4px 4px 16px; |
|
||||
} |
|
||||
|
|
||||
div#summary { |
|
||||
padding: 4px; |
|
||||
} |
|
||||
|
|
||||
div.method div.content { |
|
||||
margin: 8px; |
|
||||
} |
|
||||
|
|
||||
footer span#docu-link { |
|
||||
position: absolute; |
|
||||
right: 4px; |
|
||||
} |
|
||||
code { |
|
||||
font-family: Consolas, Courier, monospaced; |
|
||||
font-weight: normal; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
h5 { |
|
||||
margin: 8px 0px; |
|
||||
} |
|
||||
|
|
||||
dl dt { width: 180px; float: left; } |
|
||||
dl dd { margin-left: 180px; } |
|
||||
|
|
||||
|
|
||||
|
|
||||
.ir { display: block; text-indent: -999em; overflow: hidden; background-repeat: no-repeat; text-align: left; direction: ltr; } |
|
||||
.hidden { display: none; visibility: hidden; } |
|
||||
.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } |
|
||||
.visuallyhidden.focusable:active, |
|
||||
.visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; } |
|
||||
.invisible { visibility: hidden; } |
|
||||
.clearfix:before, .clearfix:after { content: "\0020"; display: block; height: 0; overflow: hidden; } |
|
||||
.clearfix:after { clear: both; } |
|
||||
.clearfix { zoom: 1; } |
|
||||
|
|
||||
|
|
||||
@media all and (orientation:portrait) { |
|
||||
|
|
||||
} |
|
||||
|
|
||||
@media all and (orientation:landscape) { |
|
||||
|
|
||||
} |
|
||||
|
|
||||
@media screen and (max-device-width: 480px) { |
|
||||
|
|
||||
/* html { -webkit-text-size-adjust:none; -ms-text-size-adjust:none; } */ |
|
||||
} |
|
||||
|
|
||||
|
|
||||
@media print { |
|
||||
* { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; |
|
||||
-ms-filter: none !important; } |
|
||||
a, a:visited { color: #444 !important; text-decoration: underline; } |
|
||||
a[href]:after { content: " (" attr(href) ")"; } |
|
||||
abbr[title]:after { content: " (" attr(title) ")"; } |
|
||||
.ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } |
|
||||
pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } |
|
||||
thead { display: table-header-group; } |
|
||||
tr, img { page-break-inside: avoid; } |
|
||||
@page { margin: 0.5cm; } |
|
||||
p, h2, h3 { orphans: 3; widows: 3; } |
|
||||
h2, h3{ page-break-after: avoid; } |
|
||||
} |
|
||||
|
|
||||
@ -1 +0,0 @@ |
|||||
e3cd94630633d09a5360ed77a721700f36ce2ec4 |
|
||||
@ -1 +0,0 @@ |
|||||
cf2127aaa212a8eee4938f3b7fd3a09151eacbce |
|
||||
@ -1 +0,0 @@ |
|||||
0621db7f369243429e07a6fcd66833db3a83c16e |
|
||||
@ -1,6 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<configuration> |
|
||||
<solution> |
|
||||
<add key="disableSourceControlIntegration" value="true" /> |
|
||||
</solution> |
|
||||
</configuration> |
|
||||
@ -1 +0,0 @@ |
|||||
3ffdd33c6106bb292523c979289efb2b30220df5 |
|
||||
@ -1,136 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
|
||||
<PropertyGroup> |
|
||||
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">$(MSBuildProjectDirectory)\..\</SolutionDir> |
|
||||
|
|
||||
<!-- Enable the restore command to run before builds --> |
|
||||
<RestorePackages Condition=" '$(RestorePackages)' == '' ">false</RestorePackages> |
|
||||
|
|
||||
<!-- Property that enables building a package from a project --> |
|
||||
<BuildPackage Condition=" '$(BuildPackage)' == '' ">false</BuildPackage> |
|
||||
|
|
||||
<!-- Determines if package restore consent is required to restore packages --> |
|
||||
<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">true</RequireRestoreConsent> |
|
||||
|
|
||||
<!-- Download NuGet.exe if it does not already exist --> |
|
||||
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<ItemGroup Condition=" '$(PackageSources)' == '' "> |
|
||||
<!-- Package sources used to restore packages. By default, registered sources under %APPDATA%\NuGet\NuGet.Config will be used --> |
|
||||
<!-- The official NuGet package source (https://www.nuget.org/api/v2/) will be excluded if package sources are specified and it does not appear in the list --> |
|
||||
<!-- |
|
||||
<PackageSource Include="https://www.nuget.org/api/v2/" /> |
|
||||
<PackageSource Include="https://my-nuget-source/nuget/" /> |
|
||||
--> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<PropertyGroup Condition=" '$(OS)' == 'Windows_NT'"> |
|
||||
<!-- Windows specific commands --> |
|
||||
<NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), ".nuget"))</NuGetToolsPath> |
|
||||
<PackagesConfig>$([System.IO.Path]::Combine($(ProjectDir), "packages.config"))</PackagesConfig> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<PropertyGroup Condition=" '$(OS)' != 'Windows_NT'"> |
|
||||
<!-- We need to launch nuget.exe with the mono command if we're not on windows --> |
|
||||
<NuGetToolsPath>$(SolutionDir).nuget</NuGetToolsPath> |
|
||||
<PackagesConfig>packages.config</PackagesConfig> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<PropertyGroup> |
|
||||
<!-- NuGet command --> |
|
||||
<NuGetExePath Condition=" '$(NuGetExePath)' == '' ">$(NuGetToolsPath)\NuGet.exe</NuGetExePath> |
|
||||
<PackageSources Condition=" $(PackageSources) == '' ">@(PackageSource)</PackageSources> |
|
||||
|
|
||||
<NuGetCommand Condition=" '$(OS)' == 'Windows_NT'">"$(NuGetExePath)"</NuGetCommand> |
|
||||
<NuGetCommand Condition=" '$(OS)' != 'Windows_NT' ">mono --runtime=v4.0.30319 $(NuGetExePath)</NuGetCommand> |
|
||||
|
|
||||
<PackageOutputDir Condition="$(PackageOutputDir) == ''">$(TargetDir.Trim('\\'))</PackageOutputDir> |
|
||||
|
|
||||
<RequireConsentSwitch Condition=" $(RequireRestoreConsent) == 'true' ">-RequireConsent</RequireConsentSwitch> |
|
||||
<NonInteractiveSwitch Condition=" '$(VisualStudioVersion)' != '' AND '$(OS)' == 'Windows_NT' ">-NonInteractive</NonInteractiveSwitch> |
|
||||
|
|
||||
<PaddedSolutionDir Condition=" '$(OS)' == 'Windows_NT'">"$(SolutionDir) "</PaddedSolutionDir> |
|
||||
<PaddedSolutionDir Condition=" '$(OS)' != 'Windows_NT' ">"$(SolutionDir)"</PaddedSolutionDir> |
|
||||
|
|
||||
<!-- Commands --> |
|
||||
<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir)</RestoreCommand> |
|
||||
<BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols</BuildCommand> |
|
||||
|
|
||||
<!-- We need to ensure packages are restored prior to assembly resolve --> |
|
||||
<BuildDependsOn Condition="$(RestorePackages) == 'true'"> |
|
||||
RestorePackages; |
|
||||
$(BuildDependsOn); |
|
||||
</BuildDependsOn> |
|
||||
|
|
||||
<!-- Make the build depend on restore packages --> |
|
||||
<BuildDependsOn Condition="$(BuildPackage) == 'true'"> |
|
||||
$(BuildDependsOn); |
|
||||
BuildPackage; |
|
||||
</BuildDependsOn> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<Target Name="CheckPrerequisites"> |
|
||||
<!-- Raise an error if we're unable to locate nuget.exe --> |
|
||||
<Error Condition="'$(DownloadNuGetExe)' != 'true' AND !Exists('$(NuGetExePath)')" Text="Unable to locate '$(NuGetExePath)'" /> |
|
||||
<!-- |
|
||||
Take advantage of MsBuild's build dependency tracking to make sure that we only ever download nuget.exe once. |
|
||||
This effectively acts as a lock that makes sure that the download operation will only happen once and all |
|
||||
parallel builds will have to wait for it to complete. |
|
||||
--> |
|
||||
<MsBuild Targets="_DownloadNuGet" Projects="$(MSBuildThisFileFullPath)" Properties="Configuration=NOT_IMPORTANT;DownloadNuGetExe=$(DownloadNuGetExe)" /> |
|
||||
</Target> |
|
||||
|
|
||||
<Target Name="_DownloadNuGet"> |
|
||||
<DownloadNuGet OutputFilename="$(NuGetExePath)" Condition=" '$(DownloadNuGetExe)' == 'true' AND !Exists('$(NuGetExePath)')" /> |
|
||||
</Target> |
|
||||
|
|
||||
<Target Name="RestorePackages" DependsOnTargets="CheckPrerequisites"> |
|
||||
<Exec Command="$(RestoreCommand)" |
|
||||
Condition="'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')" /> |
|
||||
|
|
||||
<Exec Command="$(RestoreCommand)" |
|
||||
LogStandardErrorAsError="true" |
|
||||
Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')" /> |
|
||||
</Target> |
|
||||
|
|
||||
<Target Name="BuildPackage" DependsOnTargets="CheckPrerequisites"> |
|
||||
<Exec Command="$(BuildCommand)" |
|
||||
Condition=" '$(OS)' != 'Windows_NT' " /> |
|
||||
|
|
||||
<Exec Command="$(BuildCommand)" |
|
||||
LogStandardErrorAsError="true" |
|
||||
Condition=" '$(OS)' == 'Windows_NT' " /> |
|
||||
</Target> |
|
||||
|
|
||||
<UsingTask TaskName="DownloadNuGet" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"> |
|
||||
<ParameterGroup> |
|
||||
<OutputFilename ParameterType="System.String" Required="true" /> |
|
||||
</ParameterGroup> |
|
||||
<Task> |
|
||||
<Reference Include="System.Core" /> |
|
||||
<Using Namespace="System" /> |
|
||||
<Using Namespace="System.IO" /> |
|
||||
<Using Namespace="System.Net" /> |
|
||||
<Using Namespace="Microsoft.Build.Framework" /> |
|
||||
<Using Namespace="Microsoft.Build.Utilities" /> |
|
||||
<Code Type="Fragment" Language="cs"> |
|
||||
<![CDATA[ |
|
||||
try { |
|
||||
OutputFilename = Path.GetFullPath(OutputFilename); |
|
||||
|
|
||||
Log.LogMessage("Downloading latest version of NuGet.exe..."); |
|
||||
WebClient webClient = new WebClient(); |
|
||||
webClient.DownloadFile("https://www.nuget.org/nuget.exe", OutputFilename); |
|
||||
|
|
||||
return true; |
|
||||
} |
|
||||
catch (Exception ex) { |
|
||||
Log.LogErrorFromException(ex); |
|
||||
return false; |
|
||||
} |
|
||||
]]> |
|
||||
</Code> |
|
||||
</Task> |
|
||||
</UsingTask> |
|
||||
</Project> |
|
||||
@ -1,7 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<packages> |
|
||||
<package id="coveralls.io" version="1.3.2" /> |
|
||||
<package id="NUnit.Runners" version="2.6.3" /> |
|
||||
<package id="OpenCover" version="4.5.3809-rc94" /> |
|
||||
<package id="ReportGenerator" version="1.9.1.0" /> |
|
||||
</packages> |
|
||||
@ -1,6 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<configuration> |
|
||||
<startup> |
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/> |
|
||||
</startup> |
|
||||
</configuration> |
|
||||
@ -1,87 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> |
|
||||
<PropertyGroup> |
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
|
||||
<ProjectGuid>{7BF5274B-56A7-4B62-8105-E9BDF25BAFE7}</ProjectGuid> |
|
||||
<OutputType>Exe</OutputType> |
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder> |
|
||||
<RootNamespace>ImageProcessor.PlayGround</RootNamespace> |
|
||||
<AssemblyName>ImageProcessor.PlayGround</AssemblyName> |
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion> |
|
||||
<FileAlignment>512</FileAlignment> |
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> |
|
||||
<TargetFrameworkProfile> |
|
||||
</TargetFrameworkProfile> |
|
||||
</PropertyGroup> |
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
|
||||
<PlatformTarget>AnyCPU</PlatformTarget> |
|
||||
<DebugSymbols>true</DebugSymbols> |
|
||||
<DebugType>full</DebugType> |
|
||||
<Optimize>false</Optimize> |
|
||||
<OutputPath>bin\Debug\</OutputPath> |
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
||||
<ErrorReport>prompt</ErrorReport> |
|
||||
<WarningLevel>4</WarningLevel> |
|
||||
</PropertyGroup> |
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
|
||||
<PlatformTarget>AnyCPU</PlatformTarget> |
|
||||
<DebugType>pdbonly</DebugType> |
|
||||
<Optimize>true</Optimize> |
|
||||
<OutputPath>bin\Release\</OutputPath> |
|
||||
<DefineConstants>TRACE</DefineConstants> |
|
||||
<ErrorReport>prompt</ErrorReport> |
|
||||
<WarningLevel>4</WarningLevel> |
|
||||
</PropertyGroup> |
|
||||
<PropertyGroup> |
|
||||
<StartupObject /> |
|
||||
</PropertyGroup> |
|
||||
<ItemGroup> |
|
||||
<Reference Include="System" /> |
|
||||
<Reference Include="System.Core" /> |
|
||||
<Reference Include="System.Drawing" /> |
|
||||
<Reference Include="System.Xml.Linq" /> |
|
||||
<Reference Include="System.Data.DataSetExtensions" /> |
|
||||
<Reference Include="Microsoft.CSharp" /> |
|
||||
<Reference Include="System.Data" /> |
|
||||
<Reference Include="System.Xml" /> |
|
||||
</ItemGroup> |
|
||||
<ItemGroup> |
|
||||
<Compile Include="Program.cs" /> |
|
||||
<Compile Include="Properties\AssemblyInfo.cs" /> |
|
||||
</ItemGroup> |
|
||||
<ItemGroup> |
|
||||
<None Include="App.config" /> |
|
||||
</ItemGroup> |
|
||||
<ItemGroup> |
|
||||
<ProjectReference Include="..\Plugins\ImageProcessor.Web\ImageProcessor.Web.Plugins.AzureBlobCache\ImageProcessor.Web.Plugins.AzureBlobCache.csproj"> |
|
||||
<Project>{3c805e4c-d679-43f8-8c43-8909cdb4d4d7}</Project> |
|
||||
<Name>ImageProcessor.Web.Plugins.AzureBlobCache</Name> |
|
||||
</ProjectReference> |
|
||||
<ProjectReference Include="..\ImageProcessor.Web\ImageProcessor.Web.csproj"> |
|
||||
<Project>{d011a778-59c8-4bfa-a770-c350216bf161}</Project> |
|
||||
<Name>ImageProcessor.Web</Name> |
|
||||
</ProjectReference> |
|
||||
<ProjectReference Include="..\ImageProcessor\ImageProcessor.csproj"> |
|
||||
<Project>{3B5DD734-FB7A-487D-8CE6-55E7AF9AEA7E}</Project> |
|
||||
<Name>ImageProcessor</Name> |
|
||||
</ProjectReference> |
|
||||
<ProjectReference Include="..\Plugins\ImageProcessor\ImageProcessor.Plugins.Cair\ImageProcessor.Plugins.Cair.csproj"> |
|
||||
<Project>{c7d1f0dd-cbd6-4127-82b4-51949eff0bf5}</Project> |
|
||||
<Name>ImageProcessor.Plugins.Cair</Name> |
|
||||
</ProjectReference> |
|
||||
<ProjectReference Include="..\Plugins\ImageProcessor\ImageProcessor.Plugins.WebP\ImageProcessor.Plugins.WebP.csproj"> |
|
||||
<Project>{2cf69699-959a-44dc-a281-4e2596c25043}</Project> |
|
||||
<Name>ImageProcessor.Plugins.WebP</Name> |
|
||||
</ProjectReference> |
|
||||
</ItemGroup> |
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> |
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. |
|
||||
Other similar extension points exist, see Microsoft.Common.targets. |
|
||||
<Target Name="BeforeBuild"> |
|
||||
</Target> |
|
||||
<Target Name="AfterBuild"> |
|
||||
</Target> |
|
||||
--> |
|
||||
</Project> |
|
||||
@ -1,186 +0,0 @@ |
|||||
// --------------------------------------------------------------------------------------------------------------------
|
|
||||
// <copyright file="Program.cs" company="James South">
|
|
||||
// Copyright (c) James South.
|
|
||||
// Licensed under the Apache License, Version 2.0.
|
|
||||
// </copyright>
|
|
||||
// <summary>
|
|
||||
// The program.
|
|
||||
// </summary>
|
|
||||
// --------------------------------------------------------------------------------------------------------------------
|
|
||||
|
|
||||
namespace ImageProcessor.PlayGround |
|
||||
{ |
|
||||
using System; |
|
||||
using System.Collections.Generic; |
|
||||
using System.Diagnostics; |
|
||||
using System.Drawing; |
|
||||
using System.IO; |
|
||||
using System.Linq; |
|
||||
|
|
||||
using ImageProcessor; |
|
||||
using ImageProcessor.Configuration; |
|
||||
using ImageProcessor.Imaging; |
|
||||
using ImageProcessor.Imaging.Filters.EdgeDetection; |
|
||||
//using ImageProcessor.Imaging.Filters.ObjectDetection;
|
|
||||
using ImageProcessor.Imaging.Filters.Photo; |
|
||||
using ImageProcessor.Imaging.Formats; |
|
||||
using ImageProcessor.Processors; |
|
||||
using ImageProcessor.Web.Caching; |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// The program.
|
|
||||
/// </summary>
|
|
||||
public class Program |
|
||||
{ |
|
||||
/// <summary>
|
|
||||
/// The main routine.
|
|
||||
/// </summary>
|
|
||||
/// <param name="args">
|
|
||||
/// The args.
|
|
||||
/// </param>
|
|
||||
public static void Main(string[] args) |
|
||||
{ |
|
||||
string path = new Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath; |
|
||||
|
|
||||
// ReSharper disable once AssignNullToNotNullAttribute
|
|
||||
string resolvedPath = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(path), @"..\..\images\input")); |
|
||||
DirectoryInfo di = new DirectoryInfo(resolvedPath); |
|
||||
if (!di.Exists) |
|
||||
{ |
|
||||
di.Create(); |
|
||||
} |
|
||||
|
|
||||
// Image mask = Image.FromFile(Path.Combine(resolvedPath, "mask.png"));
|
|
||||
// Image overlay = Image.FromFile(Path.Combine(resolvedPath, "imageprocessor.128.png"));
|
|
||||
//FileInfo fileInfo = new FileInfo(Path.Combine(resolvedPath, "2008.jpg"));
|
|
||||
//FileInfo fileInfo = new FileInfo(Path.Combine(resolvedPath, "stretched.jpg"));
|
|
||||
//FileInfo fileInfo = new FileInfo(Path.Combine(resolvedPath, "mountain.jpg"));
|
|
||||
//FileInfo fileInfo = new FileInfo(Path.Combine(resolvedPath, "blur-test.png"));
|
|
||||
// FileInfo fileInfo = new FileInfo(Path.Combine(resolvedPath, "earth_lights_4800.tif"));
|
|
||||
//FileInfo fileInfo = new FileInfo(Path.Combine(resolvedPath, "gamma-1.0-or-2.2.png"));
|
|
||||
//FileInfo fileInfo = new FileInfo(Path.Combine(resolvedPath, "gamma_dalai_lama_gray.jpg"));
|
|
||||
//FileInfo fileInfo = new FileInfo(Path.Combine(resolvedPath, "Arc-de-Triomphe-France.jpg"));
|
|
||||
//FileInfo fileInfo = new FileInfo(Path.Combine(resolvedPath, "Martin-Schoeller-Jack-Nicholson-Portrait.jpeg"));
|
|
||||
//FileInfo fileInfo = new FileInfo(Path.Combine(resolvedPath, "night-bridge.png"));
|
|
||||
//FileInfo fileInfo = new FileInfo(Path.Combine(resolvedPath, "tree.jpg"));
|
|
||||
//FileInfo fileInfo = new FileInfo(Path.Combine(resolvedPath, "blue-balloon.jpg"));
|
|
||||
//FileInfo fileInfo = new FileInfo(Path.Combine(resolvedPath, "test2.png"));
|
|
||||
//FileInfo fileInfo = new FileInfo(Path.Combine(resolvedPath, "120430.gif"));
|
|
||||
//FileInfo fileInfo = new FileInfo(Path.Combine(resolvedPath, "rickroll.original.gif"));
|
|
||||
|
|
||||
//////FileInfo fileInfo = new FileInfo(Path.Combine(resolvedPath, "crop-base-300x200.jpg"));
|
|
||||
//FileInfo fileInfo = new FileInfo(Path.Combine(resolvedPath, "cmyk.png"));
|
|
||||
//IEnumerable<FileInfo> files = GetFilesByExtensions(di, ".gif");
|
|
||||
//IEnumerable<FileInfo> files = GetFilesByExtensions(di, ".png", ".jpg", ".jpeg");
|
|
||||
// IEnumerable<FileInfo> files = GetFilesByExtensions(di, ".jpg", ".jpeg", ".jfif");
|
|
||||
IEnumerable<FileInfo> files = GetFilesByExtensions(di, ".png"); |
|
||||
//IEnumerable<FileInfo> files = GetFilesByExtensions(di, ".gif", ".webp", ".bmp", ".jpg", ".png");
|
|
||||
|
|
||||
foreach (FileInfo fileInfo in files) |
|
||||
{ |
|
||||
if (fileInfo.Name == "test5.jpg") |
|
||||
{ |
|
||||
continue; |
|
||||
} |
|
||||
|
|
||||
byte[] photoBytes = File.ReadAllBytes(fileInfo.FullName); |
|
||||
Console.WriteLine("Processing: " + fileInfo.Name); |
|
||||
|
|
||||
Stopwatch stopwatch = new Stopwatch(); |
|
||||
stopwatch.Start(); |
|
||||
|
|
||||
// ImageProcessor
|
|
||||
using (MemoryStream inStream = new MemoryStream(photoBytes)) |
|
||||
{ |
|
||||
using (ImageFactory imageFactory = new ImageFactory(true, true)) |
|
||||
{ |
|
||||
Size size = new Size(1920, 1920); |
|
||||
//CropLayer cropLayer = new CropLayer(20, 20, 20, 20, ImageProcessor.Imaging.CropMode.Percentage);
|
|
||||
ResizeLayer layer = new ResizeLayer(size, ResizeMode.Max, AnchorPosition.Center, false); |
|
||||
// TextLayer textLayer = new TextLayer()
|
|
||||
//{
|
|
||||
// Text = "هناك حقيقة مثبتة منذ زمن",
|
|
||||
// FontColor = Color.White,
|
|
||||
// DropShadow = true,
|
|
||||
// Vertical = true,
|
|
||||
// //RightToLeft = true,
|
|
||||
// //Position = new Point(5, 5)
|
|
||||
|
|
||||
//};
|
|
||||
|
|
||||
//ContentAwareResizeLayer layer = new ContentAwareResizeLayer(size)
|
|
||||
//{
|
|
||||
// ConvolutionType = ConvolutionType.Sobel
|
|
||||
//};
|
|
||||
// Load, resize, set the format and quality and save an image.
|
|
||||
imageFactory.Load(inStream) |
|
||||
//.DetectObjects(EmbeddedHaarCascades.FrontFaceDefault)
|
|
||||
//.Overlay(new ImageLayer
|
|
||||
// {
|
|
||||
// Image = overlay,
|
|
||||
// Opacity = 50
|
|
||||
// })
|
|
||||
//.Alpha(50)
|
|
||||
//.BackgroundColor(Color.White)
|
|
||||
//.Resize(new Size((int)(size.Width * 1.1), 0))
|
|
||||
//.ContentAwareResize(layer)
|
|
||||
//.Constrain(size)
|
|
||||
//.Mask(mask)
|
|
||||
//.Format(new PngFormat())
|
|
||||
//.BackgroundColor(Color.Cyan)
|
|
||||
//.Watermark(textLayer)
|
|
||||
//.ReplaceColor(Color.FromArgb(93, 136, 231), Color.FromArgb(94, 134, 78), 50)
|
|
||||
//.GaussianSharpen(3)
|
|
||||
//.Saturation(20)
|
|
||||
//.Resize(size)
|
|
||||
.Resize(layer) |
|
||||
// .Resize(new ResizeLayer(size, ResizeMode.Stretch))
|
|
||||
//.DetectEdges(new SobelEdgeFilter(), true)
|
|
||||
//.DetectEdges(new LaplacianOfGaussianEdgeFilter())
|
|
||||
//.GaussianBlur(new GaussianLayer(10, 11))
|
|
||||
//.EntropyCrop()
|
|
||||
//.Gamma(2.2F)
|
|
||||
//.Halftone()
|
|
||||
//.RotateBounded(150, false)
|
|
||||
//.Crop(cropLayer)
|
|
||||
//.Rotate(140)
|
|
||||
//.Filter(MatrixFilters.Invert)
|
|
||||
//.Brightness(-5)
|
|
||||
//.Contrast(50)
|
|
||||
//.Filter(MatrixFilters.Comic)
|
|
||||
//.Flip()
|
|
||||
//.Filter(MatrixFilters.HiSatch)
|
|
||||
//.Pixelate(8)
|
|
||||
//.GaussianSharpen(10)
|
|
||||
//.Format(new PngFormat() { IsIndexed = true })
|
|
||||
//.Format(new PngFormat() )
|
|
||||
.Save(Path.GetFullPath(Path.Combine(Path.GetDirectoryName(path), @"..\..\images\output", fileInfo.Name))); |
|
||||
//.Save(Path.GetFullPath(Path.Combine(Path.GetDirectoryName(path), @"..\..\images\output", Path.GetFileNameWithoutExtension(fileInfo.Name) + ".png")));
|
|
||||
|
|
||||
stopwatch.Stop(); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
long peakWorkingSet64 = Process.GetCurrentProcess().PeakWorkingSet64; |
|
||||
float mB = peakWorkingSet64 / (float)1024 / 1024; |
|
||||
|
|
||||
Console.WriteLine(@"Completed {0} in {1:s\.fff} secs {2}Peak memory usage was {3} bytes or {4} Mb.", fileInfo.Name, stopwatch.Elapsed, Environment.NewLine, peakWorkingSet64.ToString("#,#"), mB); |
|
||||
|
|
||||
//Console.WriteLine("Processed: " + fileInfo.Name + " in " + stopwatch.ElapsedMilliseconds + "ms");
|
|
||||
} |
|
||||
|
|
||||
Console.ReadLine(); |
|
||||
} |
|
||||
|
|
||||
public static IEnumerable<FileInfo> GetFilesByExtensions(DirectoryInfo dir, params string[] extensions) |
|
||||
{ |
|
||||
if (extensions == null) |
|
||||
{ |
|
||||
throw new ArgumentNullException("extensions"); |
|
||||
} |
|
||||
|
|
||||
IEnumerable<FileInfo> files = dir.EnumerateFiles(); |
|
||||
return files.Where(f => extensions.Contains(f.Extension, StringComparer.OrdinalIgnoreCase)); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,36 +0,0 @@ |
|||||
using System.Reflection; |
|
||||
using System.Runtime.CompilerServices; |
|
||||
using System.Runtime.InteropServices; |
|
||||
|
|
||||
// General Information about an assembly is controlled through the following
|
|
||||
// set of attributes. Change these attribute values to modify the information
|
|
||||
// associated with an assembly.
|
|
||||
[assembly: AssemblyTitle("ImageProcessorConsole")] |
|
||||
[assembly: AssemblyDescription("")] |
|
||||
[assembly: AssemblyConfiguration("")] |
|
||||
[assembly: AssemblyCompany("")] |
|
||||
[assembly: AssemblyProduct("ImageProcessorConsole")] |
|
||||
[assembly: AssemblyCopyright("Copyright © 2014")] |
|
||||
[assembly: AssemblyTrademark("")] |
|
||||
[assembly: AssemblyCulture("")] |
|
||||
|
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
|
||||
// to COM components. If you need to access a type in this assembly from
|
|
||||
// COM, set the ComVisible attribute to true on that type.
|
|
||||
[assembly: ComVisible(false)] |
|
||||
|
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
|
||||
[assembly: Guid("ac215639-6e27-4b9c-9ebb-9116c7a5d8a6")] |
|
||||
|
|
||||
// Version information for an assembly consists of the following four values:
|
|
||||
//
|
|
||||
// Major Version
|
|
||||
// Minor Version
|
|
||||
// Build Number
|
|
||||
// Revision
|
|
||||
//
|
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
|
||||
// by using the '*' as shown below:
|
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
|
||||
[assembly: AssemblyVersion("1.0.0.0")] |
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")] |
|
||||
|
Before Width: | Height: | Size: 155 B |
|
Before Width: | Height: | Size: 155 B |
@ -1 +0,0 @@ |
|||||
56ba9f614f44f7c905481f35e7609cb93e8fe98c |
|
||||
@ -1 +0,0 @@ |
|||||
68e14cae5c31c58b8b66d26bca6eb67c79ecd203 |
|
||||
@ -1 +0,0 @@ |
|||||
7f6786517fa67c9dfccac831e8491e4d08866d24 |
|
||||
@ -1 +0,0 @@ |
|||||
7eb554b7681119b1170b70f1c1c2fc0de28a60ac |
|
||||
@ -1 +0,0 @@ |
|||||
8d39e89104598b85035a2c29592b847edcfdb8ac |
|
||||
|
Before Width: | Height: | Size: 20 KiB |
@ -1 +0,0 @@ |
|||||
ff6cd6bf1cd388e8933071ec36880c33d1bc08f2 |
|
||||
@ -1 +0,0 @@ |
|||||
93b93eade2c7697a0a8fe9363d493a8a59de245a |
|
||||
@ -1 +0,0 @@ |
|||||
5d446f64d0636f6ad7e9f82625eeff89ef394fe2 |
|
||||
@ -1 +0,0 @@ |
|||||
9ab3fa52dd238ee4caffb47c82929f4079dc38d3 |
|
||||
@ -1 +0,0 @@ |
|||||
ea3907f002c75115c976edb47c9a8ba28e76ad9a |
|
||||
|
Before Width: | Height: | Size: 12 KiB |
@ -1 +0,0 @@ |
|||||
d5f9ac17c265d12d9d08f8bbeaf3ff13b54b149a |
|
||||
|
Before Width: | Height: | Size: 54 KiB |
@ -1 +0,0 @@ |
|||||
bdff6764fd5c4e3054ba7d8c43cc8c29be0e6f5e |
|
||||
@ -1 +0,0 @@ |
|||||
c679b986c1ccbd9f6f8d72d7e4717f380b923a75 |
|
||||
|
Before Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 3.5 KiB |
@ -1 +0,0 @@ |
|||||
cfa62bc3b77a7efb16c25218c1381da5d4f36db7 |
|
||||
@ -1 +0,0 @@ |
|||||
c704af2c49aa45e35eab9e1b4839edbb7221cc7e |
|
||||
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 5.2 KiB |
@ -1 +0,0 @@ |
|||||
b6a165b747788ab89169b1b0ab7a66c1a67eeaee |
|
||||
|
Before Width: | Height: | Size: 37 KiB |
@ -1 +0,0 @@ |
|||||
04b381ec37fffdbffa55d5b02478ad81375eaa4b |
|
||||
|
Before Width: | Height: | Size: 14 KiB |
@ -1 +0,0 @@ |
|||||
e44293020be795c40cbb19f2bad7d8589d479fb2 |
|
||||