Open yaakov-h opened 8 years ago
Note to self: Looks like most of the targets work is in WiX: https://github.com/Microsoft/CodeContracts/blob/79a04c96679b6d400c286dd62d6a2ec77462da72/Microsoft.Research/ManagedContract.Setup/ManagedContracts.wxs#L1078-L1087
I had to setup a build server with VS15 for evaluation.
The only thing needed to get it run was to copy
C:\Program Files (x86)\MSBuild\14.0\Microsoft.Common.Targets\ImportAfter\CodeContractsAfter.targets
to
C:\Program Files (x86)\MSBuild\15.0\Microsoft.Common.Targets\ImportAfter\CodeContractsAfter.targets
Of course you don't get the CC settings page in the project properties, but it's sufficient to try out existing solutions
That works for me too, though I haven't tried CC with any of the new C#7 features yet.
I think the settings pane should show up if you run the MSI after installing VS15. If not, there's a breaking change somewhere in VS.
Location since recent builds seem to be
:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Microsoft.Common.targets\ImportAfter
(depending on edition)
@patroza doesnt work in release version. Pathes from post of @yaakov-h work
Does this mean that Code Contracts will be supported in Visual Studio 2017 soon?
@takinosaji I've decided to move on and not have this headache at every new VS version :)
@mmusaev Depends what you mean by "supported", and if anyone's left alive here to merge #482.
I meant by support if Code Contract would be integrated into Visual Studios 2017 Settings Tab.
I honestly have no idea how to do that at the moment.
On 12 Mar 2017, at 9:44 am, mmusaev notifications@github.com wrote:
I meant by support if Code Contract would be integrated into Visual Studios 2017 Settings Tab.
― You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.
Would it be possible to ask for help from Microsoft/Research lab on this?
@yaakov-h PR #482 makes it work at least at compile time, however if static analysis is active I always see CodeContracts: Task manager is unavailable (unable to run in background).
in the output, and the build takes forever since it has to wait for CC. Did you experience the same behavior?
@tom-englert the task manager appears to be provided by Code Contracts' Microsoft.VisualStudio.CodeTools
plugin, which was part of the too-hard basket.
As I understand it, all the Visual Studio extension-y bits would need to be packages as a VSIX, rather than the MSI dumping DLLs all over the place and writing to Visual Studio's registry.
I see, so probably it's easier to turn on CC only temporary, than to try fixing this...
Probably. I actually run cccheck completely out-of-band (see #459) so I didn't really notice.
This works out of the box in Visual Studio 2017. It is past of the System.Diagnostics.Contracts namespace. See example below:
Contract.Requires<ArgumentNullException>(amount > 0, "Amount to deposit must be positive.");
@Mzangwe While System.Diagnostics.Contracts types are in place in the class library itself, the rewriting tools needed to make use of this data aren't integrated with Visual Studio 2017. You can put in all the Contract
statements you want in your code, and none of them will have any effect at runtime because the assemblies weren't rewritten to actually check pre- and post-conditions or invariants.
@coldacid Chris, I used the exact Code Contract in both Debug and Release. They both fail when adding a negative deposit amount.
I added these in the .csproj below
`
<CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
<CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
<CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>
<CodeContractsRuntimeCallSiteRequires>False</CodeContractsRuntimeCallSiteRequires>
<CodeContractsRuntimeSkipQuantifiers>False</CodeContractsRuntimeSkipQuantifiers>
<CodeContractsRunCodeAnalysis>False</CodeContractsRunCodeAnalysis>
<CodeContractsNonNullObligations>False</CodeContractsNonNullObligations>
<CodeContractsBoundsObligations>False</CodeContractsBoundsObligations>
<CodeContractsArithmeticObligations>False</CodeContractsArithmeticObligations>
<CodeContractsEnumObligations>False</CodeContractsEnumObligations>
<CodeContractsRedundantAssumptions>False</CodeContractsRedundantAssumptions>
<CodeContractsInferRequires>False</CodeContractsInferRequires>
<CodeContractsInferEnsures>False</CodeContractsInferEnsures>
<CodeContractsInferObjectInvariants>False</CodeContractsInferObjectInvariants>
<CodeContractsSuggestAssumptions>False</CodeContractsSuggestAssumptions>
<CodeContractsSuggestRequires>True</CodeContractsSuggestRequires>
<CodeContractsSuggestEnsures>False</CodeContractsSuggestEnsures>
<CodeContractsSuggestObjectInvariants>False</CodeContractsSuggestObjectInvariants>
<CodeContractsDisjunctiveRequires>False</CodeContractsDisjunctiveRequires>
<CodeContractsRunInBackground>True</CodeContractsRunInBackground>
<CodeContractsShowSquigglies>False</CodeContractsShowSquigglies>
<CodeContractsUseBaseLine>False</CodeContractsUseBaseLine>
<CodeContractsEmitXMLDocs>True</CodeContractsEmitXMLDocs>
<CodeContractsCacheAnalysisResults>True</CodeContractsCacheAnalysisResults>
<CodeContractsRuntimeCheckingLevel>Full</CodeContractsRuntimeCheckingLevel>
<CodeContractsReferenceAssembly>Build</CodeContractsReferenceAssembly>
<CodeContractsAnalysisWarningLevel>0</CodeContractsAnalysisWarningLevel>
`
Then for the Release Condition:
<CodeContractsRuntimeCheckingLevel>ReleaseRequires</CodeContractsRuntimeCheckingLevel>
They App breaks in whichever mode. This then come very handy with Automated Tests even for the PROD stuff. I added CodeContracts.MSBuild Nuget Package for my automated build pipelines.
What needs to be done to add support for VS15, however preliminary.
At minimum we need MSBuild targets for v15.0 (
C:\Program Files (x86)\Microsoft\Contracts\MsBuild
).What would I need to modify to add such targets to the project?
ITaskManager
for background static analysis