anchor.diff:      let args = setParams defaultDeploymentArgs
       let action, outputPath = generateCommandLine args.Action
   
  -    let additionalParameters =
  -        args.AdditionalSqlPackageProperties
  -        |> List.map (fun (key, value) -> sprintf "/p:%s=%s" key value)
  -        |> String.concat " "
  +    let concat parameter =
  +        List.map (fun (key, value) -> sprintf "/%s:%s=%s" parameter key value)
  +        >> String.concat " "
  +
  +    let additionalParameters = args.AdditionalSqlPackageProperties |> concat "p"
  +
  +    let variables = args.Variables |> concat "v"
   
       if System.String.IsNullOrWhiteSpace args.SqlPackageToolPath then
           failwith "No SqlPackage.exe filename was given."
  
positive.code:     /// Recreates the database from scratch on publish (rather than an in-place update). Defaults to false.
      RecreateDb : bool
      /// Additional configuration parameters required by sqlpackage.exe
      AdditionalSqlPackageProperties : (string * string) list }
  
  let validPaths =
      let getSqlVersion (path:string) = path.Split '\\' |> Array.item 3 |> int
  
negative.code:           
      shellExec {
          Program = args.SqlPackageToolPath
          CommandLine = sprintf """/Action:%s /SourceFile:"%s" /TargetConnectionString:"%s" %s /p:BlockOnPossibleDataLoss=%b /p:DropObjectsNotInSource=%b /p:CommandTimeout=%d /p:CreateNewDatabase=%b %s %s""" action args.Source args.Destination outputPath args.BlockOnPossibleDataLoss args.DropObjectsNotInSource args.Timeout args.RecreateDb additionalParameters variables
          WorkingDirectory = ""
          Args = [] }
  
  