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

Visual Studio 2017 support #451

Open

Description

@yaakov-h

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?

  • MSBuild targets for MSBuild 15.0 (Add MSBuild targets for VS2017 #482)
  • Plugin / Project Preferences sheet
  • Code Snippets
  • ITaskManager for background static analysis
  • Tests?
  • Anything else?

Activity

  1. tom-englert commented on Nov 12, 2016

    @tom-englert
    Contributor

    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

  2. yaakov-h commented on Nov 12, 2016

    @yaakov-h
    ContributorAuthor

    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.

  3. patroza commented on Dec 14, 2016

    @patroza

    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)

  4. changed the title [-]VS15 (Preview) support[/-] [+]Visual Studio 2017 (RC) support[/+] on Feb 14, 2017
  5. takinosaji commented on Mar 7, 2017

    @takinosaji

    Patrick Roza (@patroza) doesnt work in release version. Pathes from post of Yaakov (@yaakov-h) work

  6. changed the title [-]Visual Studio 2017 (RC) support[/-] [+]Visual Studio 2017 support[/+] on Mar 8, 2017
  7. mmusaev commented on Mar 10, 2017

    @mmusaev

    Does this mean that Code Contracts will be supported in Visual Studio 2017 soon?

  8. patroza commented on Mar 10, 2017

    @patroza

    Kostiantyn Chomakov (@takinosaji) I've decided to move on and not have this headache at every new VS version :)

  9. yaakov-h commented on Mar 11, 2017

    @yaakov-h
    ContributorAuthor

    mmusaev Depends what you mean by "supported", and if anyone's left alive here to merge #482.

  10. mmusaev commented on Mar 11, 2017

    @mmusaev

    I meant by support if Code Contract would be integrated into Visual Studios 2017 Settings Tab.

  11. yaakov-h commented on Mar 11, 2017

    @yaakov-h
    ContributorAuthor
  12. mmusaev commented on Mar 12, 2017

    @mmusaev

    Would it be possible to ask for help from Microsoft/Research lab on this?

  13. tom-englert commented on Mar 19, 2017

    @tom-englert
    Contributor

    Yaakov (@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?

  14. yaakov-h commented on Mar 19, 2017

    @yaakov-h
    ContributorAuthor

    tom-englert (@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.

  15. tom-englert commented on Mar 20, 2017

    @tom-englert
    Contributor

    I see, so probably it's easier to turn on CC only temporary, than to try fixing this...

  16. yaakov-h commented on Mar 20, 2017

    @yaakov-h
    ContributorAuthor

    Probably. I actually run cccheck completely out-of-band (see #459) so I didn't really notice.

  17. Mzangwe commented on Apr 24, 2018

    @Mzangwe

    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.");

  18. charabaruk commented on Apr 24, 2018

    @charabaruk

    Siyabulela Mooi (@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.

  19. Mzangwe commented on Apr 25, 2018

    @Mzangwe

    @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

    <PropertyGroup> <CodeContractsAssemblyMode>1</CodeContractsAssemblyMode> <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> </PropertyGroup>

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions