Tool for removing .NET Code Contracts from source code. Currently only C# is supported. I will gladly accept PR with VB support.
.NET 4.7.1 is required to run this application.
Install-Package CodeContractsRemover
or
Download and un-zip from https://www.nuget.org/api/v2/package/CodeContractsRemover
Tool is located at "PROJECT_DIR/packages/CodeContractsRemover.VERSION/tools/".
CodeContractsRemover.exe <Convert|Stats> <directoryPath> [--searchPattern *.cs *.csproj] [--encoding utf-8] [--ignorePattern .svn/ ]
Example
CodeContractsRemover.exe Convert ./myproject
To run using mono on Mac OS X
/Library/Frameworks/Mono.framework/Commands/mono code_contracts_remover.exe Convert ./myproject
To run using mono on Linux
/usr/bin/mono code_contracts_remover.exe Convert ./myproject
- Converts all Contract.Requires to "if(!x) throw new ArgumentException()" pattern at the beginning of method/property/constructor.
- Converts all Contract.Ensures to "if(!x) throw new InvalidOperationException()" pattern before each return inside method/property/constructor.
- Converts all Contract.Assert, Contract.Assume and Contract.Invariant to "if(!x) throw new InvalidOperationException()" pattern.
- Invokes invariant methods before each return incide method/property/constructor.
- Preserves all other Contract invocations (including Attributes and Contract classes).
- Removes CodeContract properties and constants from project files
#### Mode - Remove
- Removes any Contract invocations.
- Invariant methods are preserved
- Attributes and Contract classes are removed
- Removes CodeContract properties and constants from project files
- Collects statistics about how Contracts are used. Example of result:
[ContractClassFor] 1
[ContractInvariantMethod] 2
Contract.Assert 1
Contract.Ensures 6
Contract.Invariant 2
Contract.Requires 6
Contract.Result 5
In Convert mode Jet Brains annotations ([NotNull]) can be added to class members. Jet Brains annotations are added using JetBrains.Annotations NuGet package.
Don't add annotations
Include annotations only for work in Visual Studio/Rider before compilation. When project is compiled, annotations would be removed. When dll is referenced into other project, Rider/Re# wouldn't show hints. This mode is recommended for applications. Read more on Jet Brains site.
Annotations will be included into binaries, so Rider/Re# would show hints before and after compilation (when binary is referenced into other project). This mode is recommended for packages. Read more on Jet Brains site.
- @ishatalkin
- @mgaffigan