Skip to content
This repository has been archived by the owner on Jul 15, 2023. It is now read-only.

Add MSBuild targets for VS2017 #482

Merged
merged 5 commits into from
Mar 11, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Microsoft.Research/CCDoc/Sandcastle/Sandcastle.zip
*.user
*.userosscache
*.sln.docstates
.vs

# Build results
[Dd]ebug/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,11 @@
<CodeContractsReferenceAssemblyLibPath>$(CodeContractsInstallDir)Contracts\.NETFramework\v4.6</CodeContractsReferenceAssemblyLibPath>
</PropertyGroup>
</When>
<When Condition="'$(TargetFrameworkVersion)' == 'v4.6.2'">
<PropertyGroup>
<CodeContractsReferenceAssemblyLibPath>$(CodeContractsInstallDir)Contracts\.NETFramework\v4.6</CodeContractsReferenceAssemblyLibPath>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup>
<CodeContractsReferenceAssemblyLibPath>$(CodeContractsInstallDir)Contracts\v3.5</CodeContractsReferenceAssemblyLibPath>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,11 @@
<CodeContractsReferenceAssemblyLibPath>$(CodeContractsInstallDir)Contracts\.NETFramework\v4.6</CodeContractsReferenceAssemblyLibPath>
</PropertyGroup>
</When>
<When Condition="'$(TargetFrameworkVersion)' == 'v4.6.2'">
<PropertyGroup>
<CodeContractsReferenceAssemblyLibPath>$(CodeContractsInstallDir)Contracts\.NETFramework\v4.6</CodeContractsReferenceAssemblyLibPath>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup>
<CodeContractsReferenceAssemblyLibPath>$(CodeContractsInstallDir)Contracts\v3.5</CodeContractsReferenceAssemblyLibPath>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,260 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--=====================================================================
Begin Microsoft Code Contracts Analysis
======================================================================-->


<!--=====================================================================
Add post build step for static contract checker
======================================================================-->
<PropertyGroup>
<PrepareForRunDependsOn>$(PrepareForRunDependsOn);CodeContractsRunCodeAnalysisOnTarget;CodeContractsPerformCodeAnalysis</PrepareForRunDependsOn>
<CodeContractsCodeAnalysisOutput>$(IntermediateOutputPath)CodeContractAnalysisRun.log</CodeContractsCodeAnalysisOutput>
</PropertyGroup>

<!--=====================================================================
Define tool options
======================================================================-->

<PropertyGroup>
<CodeContractRunCodeAnalysisCommand>$(CodeContractsInstallDir)Bin\cccheck.exe</CodeContractRunCodeAnalysisCommand>
</PropertyGroup>

<!--=====================================================================
Running Static Code Analysis
======================================================================-->

<Target
Name="CodeContractsPerformCodeAnalysis"
Condition="'$(CodeContractsRunCodeAnalysis)' == 'true'"
DependsOnTargets="CodeContractsComputeCodeAnalysisDependencies;CodeContractsCodeAnalysisWriteRSPFile;CodeContractsRunCodeAnalysis">
</Target>

<Target
Name="CodeContractsComputeCodeAnalysisDependencies"
DependsOnTargets="ContractDeclarativeAssembly">

<ItemGroup>
<CodeContractsCodeAnalysisInput
Include="@(ReferencePath)"/>
<CodeContractsCodeAnalysisInput
Include="@(ContractDeclarativeAssemblies)"/>
</ItemGroup>

</Target>

<Target Name="CodeContractsLoadEnvVars">
<PropertyGroup>
<CodeContractsTargetMember>$([System.Environment]::GetEnvironmentVariable(`CodeContractsTargetMember`))</CodeContractsTargetMember>
<CodeContractsTargetType>$([System.Environment]::GetEnvironmentVariable(`CodeContractsTargetType`))</CodeContractsTargetType>
<CodeContractsTargetNamespace>$([System.Environment]::GetEnvironmentVariable(`CodeContractsTargetNamespace`))</CodeContractsTargetNamespace>
<CodeContractsTargetProjectGuid>$([System.Environment]::GetEnvironmentVariable(`CodeContractsTargetProjectGuid`))</CodeContractsTargetProjectGuid>
</PropertyGroup>
</Target>

<Target
Name="CodeContractsRunCodeAnalysisOnTarget"
Condition="'$(ProjectGuid)' != '' and '$([System.Environment]::GetEnvironmentVariable(`CodeContractsTargetProjectGuid`))' == '$(ProjectGuid)'"
DependsOnTargets="CodeContractsComputeCodeAnalysisDependencies;CodeContractsLoadEnvVars">
<CallTarget Targets="CodeContractsRunCodeAnalysisInternal" />
</Target>

<Target
Name="CodeContractsRunCodeAnalysis"
Condition="'$(CodeContractsRunCodeAnalysis)' == 'true' and '$(CodeContractsDeferCodeAnalysis)' != 'true' and '$([System.Environment]::GetEnvironmentVariable(`CodeContractsTargetProjectGuid`))' == '' and '$(BuildingProject)'=='true'"
Inputs="@(CodeContractsCodeAnalysisInput)"
Outputs="$(CodeContractsCodeAnalysisOutput)"
>
<CallTarget Targets="CodeContractsRunCodeAnalysisInternal"/>
<Touch
Files="$(CodeContractsCodeAnalysisOutput)"
AlwaysCreate="true"
ForceTouch="true"/>
<ItemGroup>
<FileWrites
Include="$(CodeContractsCodeAnalysisOutput)"/>
</ItemGroup>
</Target>

<!-- The code contracts task -->
<UsingTask TaskName="Microsoft.Research.CodeContractsAnalysis" AssemblyFile="$(CodeContractsInstallDir)Bin\MsBuildCodeContracts.dll" />

<!-- Get the warning level -->
<Choose>
<When Condition="'$(CodeContractsAnalysisWarningLevel)'==''">
<PropertyGroup>
<CodeContractsAnalysisWarning>low</CodeContractsAnalysisWarning>
</PropertyGroup>
</When>
<When Condition="'$(CodeContractsAnalysisWarningLevel)'=='0'">
<PropertyGroup>
<CodeContractsAnalysisWarning>low</CodeContractsAnalysisWarning>
</PropertyGroup>
</When>
<When Condition="'$(CodeContractsAnalysisWarningLevel)'=='1'">
<PropertyGroup>
<CodeContractsAnalysisWarning>mediumlow</CodeContractsAnalysisWarning>
</PropertyGroup>
</When>
<When Condition="'$(CodeContractsAnalysisWarningLevel)'=='2'">
<PropertyGroup>
<CodeContractsAnalysisWarning>medium</CodeContractsAnalysisWarning>
</PropertyGroup>
</When>
<When Condition="'$(CodeContractsAnalysisWarningLevel)'=='3'">
<PropertyGroup>
<CodeContractsAnalysisWarning>full</CodeContractsAnalysisWarning>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup>
<CodeContractsAnalysisWarning>low</CodeContractsAnalysisWarning>
</PropertyGroup>
</Otherwise>
</Choose>


<!-- Get Bounds obligations -->
<Choose>
<When Condition="'$(CodeContractsBoundsObligations)'!='true'">
<PropertyGroup>
<CodeContractsBounds>noObl</CodeContractsBounds>
</PropertyGroup>
</When>
<When Condition="'$(CodeContractsBoundsObligations)'=='true'">
<PropertyGroup>
<CodeContractsBounds></CodeContractsBounds>
</PropertyGroup>
</When>
</Choose>

<Target
Name="CodeContractsCodeAnalysisWriteRSPFile"
DependsOnTargets="CodeContractsComputeAllLibPaths;EnsureContractReferenceAssemblyOfDependeeProjects;CodeContractsLoadEnvVars"
>
<PropertyGroup>
<DeclarativeAssemblyDir>@(ContractDeclarativeAssembly->'%(RootDir)')@(ContractDeclarativeAssembly->'%(Directory)')</DeclarativeAssemblyDir>
<DeclarativeAssemblyPath>@(ContractDeclarativeAssembly->'%(FullPath)')</DeclarativeAssemblyPath>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsPlatformPath)' != ''">-platform "$(CodeContractsPlatformPath)"</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsClassLibrary)' != ''">$(CodeContractCodeAnalysisOptions) -cclib "$(CodeContractsClassLibrary)"</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsAssemblyMode)' == '1'">$(CodeContractCodeAnalysisOptions) -assemblyMode=standard</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions>$(CodeContractCodeAnalysisOptions) -maxwarnings 1200</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsNonNullObligations)' != 'true'">$(CodeContractCodeAnalysisOptions) -nonnull:noObl</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsNonNullObligations)' == 'true'">$(CodeContractCodeAnalysisOptions) -nonnull</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions>$(CodeContractCodeAnalysisOptions) -bounds:$(CodeContractsBounds) -arrays -wp=true -bounds:type=subpolyhedra,reduction=simplex,diseq=false </CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsPointerObligations)' == 'true'">$(CodeContractCodeAnalysisOptions) -buffers:type=subpolyhedra,fastcheck=false</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions>$(CodeContractCodeAnalysisOptions) -arrays -adaptive</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsArithmeticObligations)' == 'true'">$(CodeContractCodeAnalysisOptions) -arithmetic</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsEnumObligations)' == 'true'">$(CodeContractCodeAnalysisOptions) -enum</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsRedundantAssumptions)' == 'true'">$(CodeContractCodeAnalysisOptions) -check assumptions</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsAssertsToContractsCheckBox)' == 'true'">$(CodeContractCodeAnalysisOptions) -suggest asserttocontracts</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsRedundantTests)' == 'true'">$(CodeContractCodeAnalysisOptions) -check conditionsvalidity</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsMissingPublicRequiresAsWarnings)' == 'true'">$(CodeContractCodeAnalysisOptions) -missingPublicRequiresAreErrors</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsMissingPublicEnsuresAsWarnings)' == 'true'">$(CodeContractCodeAnalysisOptions) -missingPublicEnsuresAreErrors</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsSuggestAssumptionsForCallees)' == 'true'">$(CodeContractCodeAnalysisOptions) -suggest calleeassumes</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsSuggestAssumptions)' == 'true'">$(CodeContractCodeAnalysisOptions) -suggest assumes</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsSuggestRequires)' == 'true'">$(CodeContractCodeAnalysisOptions) -suggest requires</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsSuggestEnsures)' == 'true'">$(CodeContractCodeAnalysisOptions) -suggest methodensures -suggest propertyensures</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsNecessaryEnsures)' == 'true'">$(CodeContractCodeAnalysisOptions) -suggest necessaryensures</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsSuggestObjectInvariants)' == 'true'">$(CodeContractCodeAnalysisOptions) -suggest objectinvariants</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsSuggestReadonly)' == 'true'">$(CodeContractCodeAnalysisOptions) -suggest readonlyfields</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsInferRequires)' == 'true'">$(CodeContractCodeAnalysisOptions) -infer requires</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsInferEnsures)' == 'true'">$(CodeContractCodeAnalysisOptions) -infer methodensures</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsInferEnsuresAutoProperties)' == 'true'">$(CodeContractCodeAnalysisOptions) -infer autopropertiesensures</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsInferObjectInvariants)' == 'true'">$(CodeContractCodeAnalysisOptions) -infer objectinvariants</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsCacheAnalysisResults)' == 'true'">$(CodeContractCodeAnalysisOptions) -cache</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsSkipAnalysisIfCannotConnectToCache)' == 'true'">$(CodeContractCodeAnalysisOptions) -forcecacheserver=true</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsFailBuildOnWarnings)' == 'true'">$(CodeContractCodeAnalysisOptions) -failOnWarnings</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsCacheDirectory)' != ''">$(CodeContractCodeAnalysisOptions) -cacheFileDirectory "$(CodeContractsCacheDirectory)"</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsCacheVersion)' != ''">$(CodeContractCodeAnalysisOptions) -cacheVersion "$(CodeContractsCacheVersion)"</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsCacheMaxSize)' != ''">$(CodeContractCodeAnalysisOptions) -cacheMaxSize "$(CodeContractsCacheMaxSize)"</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsTargetMember)' != ''">$(CodeContractCodeAnalysisOptions) -memberNameSelect:$(CodeContractsTargetMember)</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsTargetType)' != ''">$(CodeContractCodeAnalysisOptions) -typeNameSelect:$(CodeContractsTargetType)</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsBeingOptimisticOnExternal)' == 'false'">$(CodeContractCodeAnalysisOptions) -lowScoreForExternal=false</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsTargetNamespace)' != ''">$(CodeContractCodeAnalysisOptions) -namespaceSelect:$(CodeContractsTargetNamespace)</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsUseBaseLine)' == 'true' and '$(CodeContractsBaseLineFile)' != ''">$(CodeContractCodeAnalysisOptions) -baseline "$(CodeContractsBaseLineFile)"</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions
Condition="'$(CodeContractsSQLServerOption)' != ''">$(CodeContractCodeAnalysisOptions) -cacheserver:$(CodeContractsSQLServerOption)</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisOptions>$(CodeContractCodeAnalysisOptions) $(CodeContractsExtraAnalysisOptions)</CodeContractCodeAnalysisOptions>
<CodeContractCodeAnalysisHideMarkers Condition="'$(CodeContractsShowSquigglies)' == 'true'">false</CodeContractCodeAnalysisHideMarkers>
<CodeContractCodeAnalysisHideMarkers Condition="'$(CodeContractsShowSquigglies)' != 'true'">true</CodeContractCodeAnalysisHideMarkers>
<CodeContractCodeAnalysisRunInBackground Condition="'$(CodeContractsRunInBackground)' != 'false'">true</CodeContractCodeAnalysisRunInBackground>
<CodeContractCodeAnalysisRunInBackground Condition="'$(CodeContractsRunInBackground)' == 'false'">false</CodeContractCodeAnalysisRunInBackground>
</PropertyGroup>

<PropertyGroup>
<_CodeContractsCCCheckArguments>-nobox -nologo -nopex -remote -suggest=!! -premode combined -suggest codefixes -framework:$(TargetFrameworkVersion) -warninglevel $(CodeContractsAnalysisWarning) $(CodeContractCodeAnalysisOptions) "-resolvedPaths:@(ReferencePath)" "-libPaths:@(CodeContractsAllLibPaths)" "$(DeclarativeAssemblyPath)"</_CodeContractsCCCheckArguments>
</PropertyGroup>

<ItemGroup>
<_CodeContractsCCCheckArgumentLines
Include="$(_CodeContractsCCCheckArguments)"
/>
</ItemGroup>

<WriteLinesToFile
File="$(DeclarativeAssemblyDir)$(AssemblyName).cccheck.rsp"
Lines="@(_CodeContractsCCCheckArgumentLines, ';')"
Overwrite="true"
/>

</Target>

<Target
Name="CodeContractsRunCodeAnalysisInternal"
DependsOnTargets="CodeContractsCodeAnalysisWriteRSPFile">

<Message Text="Run Contract Code Analysis on project guid $(ProjectGuid)" Importance="Low"/>

<CodeContractsAnalysis
Verbose="false"
RunInBackground="$(CodeContractCodeAnalysisRunInBackground)"
WorkingDirectory="$(DeclarativeAssemblyDir)"
ProjectName="$(ProjectName)"
HideMarkers="$(CodeContractCodeAnalysisHideMarkers)"
MultiLineMarkers="false"
HideOutput="false"
KeepErrors="$(CodeContractsFailBuildOnWarnings)"
OutputPrefix="CodeContracts: "
Command='$(CodeContractRunCodeAnalysisCommand)'
CommandOptions='"@$(AssemblyName).cccheck.rsp"'
/>
</Target>

<!-- End Microsoft Code Contract Analysis -->
</Project>
Loading