Search code examples
.netvisual-studio-2010code-contractsstrongname

Force Code Contracts to use sn.exe 4.0


The Code Contracts rewriter uses the Strong Name (sn.exe) utility to resign the rewritten assembly. However in the Output pane of the VS 2010 I see:

Microsoft (R) .NET Framework Strong Name Utility Version 3.5.30729.1

Is there a way to force using the version 4.0 of the sn.exe. Or it doesn't make any difference?


Solution

  • You can modify the MSBuild targets file for Code Contracts to force it to use sn.exe from the version 4.0 SDK. The targets file in question would usually be located at C:\Program Files\Microsoft\Contracts\MsBuild\v4.0\Microsoft.CodeContracts.targets.

    The simplest modification would be to replace the line

    <CodeContractsSnExe>"$(CodeContractsSdkPath)Bin\NETFX 4.0 Tools\sn.exe"</CodeContractsSnExe>
    

    with a version to specifies the exact path to the copy of sn.exe that you want to run. e.g.:

    <CodeContractsSnExe>"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\NETFX 4.0 Tools\sn.exe"</CodeContractsSnExe>
    

    If you need to support alternate versions, it would be a better idea to keep the old line, but make the assignment conditional on the value being empty. That way, you could specify an override only when you need it.