roundcrisis
roundcrisis

Reputation: 17805

FAKE build a project with unsafe flag

I am trying to build a solution where one of the projects needs to be build with the unsafe flag on, it is set correctly in the project however when building I get the error:

"Unsafe code may only appear if compiling with /unsafe"

This is my target at the moment

    Target "CompileApp" (fun _ ->
        !! @"**\*.csproj"
          |> MSBuildRelease buildDir "Build"
          |> Log "AppBuild-Output: "
    )

I tried adding MsBuildParams but not sure how to use them yet (ie there doesnt seem to be an option in MsBuildRelease to add something like this

let setParams defaults =
    { defaults with
        Verbosity = Some(Quiet)
        Targets = ["Build"]
        Properties =
            [
                "AllowUnsafeBlocks", "True"
                "Configuration", "Release"
            ]
    }

Also would the best option here be create two different targets for projects with safe and unsafe code, of would there be a better way?

Upvotes: 1

Views: 276

Answers (2)

Ian Claxton
Ian Claxton

Reputation: 11

I found that the AllowUnsafeBlocks=true element was only defined under the DEBUG|AnyCPU and Release|AnyCPU PropertyGroups in my project file.

Using this fixed it for me:

Target "BuildApp" (fun _ ->
    !! ".\**\MyApp.*.csproj"
    |> MSBuild buildDir "Build" ["Configuration", "Release"; "Platform", "AnyCPU"]
    |> Log "AppBuild-Output: "
)

Hope this helps.

Upvotes: 1

roundcrisis
roundcrisis

Reputation: 17805

Ok I think this might be the way:

Target "CompileUnsafe" (fun _ ->          
    let buildMode = getBuildParamOrDefault "buildMode" "Release"
    let setParams defaults =
        { defaults with
            Verbosity = Some(Quiet)
            Targets = ["Build"]
            Properties =
                [
                    "Optimize", "True"
                    "DebugSymbols", "True"
                    "Configuration", buildMode
                    "AllowUnsafeBlocks", "True"
                ]
        }
    build setParams "./ProjectPlugins.sln"      
)

IF there are better solutions I'm all ears (the solution was there in the docs and I just missed it)

Upvotes: 0

Related Questions