fsprojects / ProjectScaffold

A prototypical .NET solution (file system layout and tooling), recommended for F# projects
http://fsprojects.github.io/ProjectScaffold
The Unlicense
515 stars 154 forks source link

Error: The target "Build" does not exist in the project #349

Open alexandru opened 4 years ago

alexandru commented 4 years ago

On MacOS the initial build.sh fails with this:

/usr/local/Cellar/mono/6.0.0.319/lib/mono/msbuild/15.0/bin/MSBuild.dll /bl:/var/folders/r1/xm_0s3y11td6zwk4mx8nplrw0000gn/T/tmpixxlW5.tmp.binlog /p:RestorePackages=False /p:Optimize=True /p:DebugSymbols=True /p:Configuration=Release /t:Build /v:q MyProject.sln
/Users/alex/Projects/MyProject/src/MyProject/MyProject.fsproj : error MSB4057: The target "Build" does not exist in the project.
/Users/alex/Projects/MyProject/src/MyProject/MyProject.fsproj : error MSB4057: The target "Build" does not exist in the project.
/Users/alex/Projects/MyProject/src/MyProject/MyProject.fsproj : error MSB4057: The target "Build" does not exist in the project.
/Users/alex/Projects/MyProject/src/MyProjectConsole/MyProjectConsole.fsproj : error MSB4057: The target "Build" does not exist in the project.
/Users/alex/Projects/MyProject/src/MyProjectConsole/MyProjectConsole.fsproj : error MSB4057: The target "Build" does not exist in the project.
: /Users/alex/Projects/MyProject/src/MyProject/MyProject.fsproj(0,0): error MSB4057: The target "Build" does not exist in the project.
: /Users/alex/Projects/MyProject/src/MyProjectConsole/MyProjectConsole.fsproj(0,0): error MSB4057: The target "Build" does not exist in the project.
Finished (Failed) 'MSBuild' in 00:00:02.1028417
Finished (Failed) 'Build' in 00:00:02.1050855
Thorium commented 4 years ago

To found the issue, you can created your own Build-target to the fsproj-file first:

<Target Name="Build">
    <Message Text="Ext = $(MSBuildExtensionsPath)" />
    <Message Text="Tools = $(MSBuildToolsVersion)" />
    <Message Text="msb32 = $(MSBuildExtensionsPath32)" />
    <Message Text="targ = $(TargetFrameworkIdentifier)" />
    <Message Text="fs = $(FSharpTargetsPath)" />
    <Message Text="vs = $(VisualStudioVersion)" />
</Target>  

The issue is probably that there is a condition saying something like

  <PropertyGroup Condition="'$(VisualStudioVersion)' != '11.0'">
    <FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
  </PropertyGroup>

but with recent Visual Studio the condition is not met or the path is actually somewhere else, like in VisualStudio\v$(MSBuildToolsVersion)\FSharp\ and not in VisualStudio\v$(VisualStudioVersion)\FSharp\ so as a quick fix you can fallback it to something else like

  <PropertyGroup Condition="'$(VisualStudioVersion)' != '11.0' And Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\')">
    <FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
  </PropertyGroup>
  <PropertyGroup Condition="'$(VisualStudioVersion)' != '11.0' And Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\FSharp\')">
    <FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
  </PropertyGroup>  
daz10000 commented 4 years ago

Second this - a fresh pull of the project, ran once to enter project details and then ./build.sh (windows, git) gives output below

RUnning

$ dotnet --info
.NET Core SDK (reflecting any global.json):
 Version:   3.1.201
 Commit:    b1768b4ae7

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.18363
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\3.1.201\

Host (useful for support):
  Version: 3.1.3
  Commit:  4a9f85e9f8

.NET Core SDKs installed:
  2.2.401 [C:\Program Files\dotnet\sdk]
  3.0.100 [C:\Program Files\dotnet\sdk]
  3.1.100 [C:\Program Files\dotnet\sdk]
  3.1.201 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.17 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.17 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.1.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.1.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.1.17 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 3.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 3.1.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 3.1.3 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
$ ./build.sh
  Restore completed in 26.94 ms for C:\extproj\ProjectScaffold\build.proj.
  Restore completed in 30.53 ms for C:\extproj\ProjectScaffold\build.proj.
The last restore is still up to date. Nothing left to do.
run All
Building project with version: LocalBuild
Shortened DependencyGraph for Target All:
<== All
   <== NuGet
      <== GenerateDocs
         <== RunTests
            <== CopyBinaries
               <== Build
                  <== Restore
                     <== AssemblyInfo
                        <== Clean
         <== ReferenceDocs
            <== Docs
               <== CleanDocs

The running order is:
Group - 1
  - Clean
Group - 2
  - AssemblyInfo
Group - 3
  - Restore
Group - 4
  - Build
Group - 5
  - CopyBinaries
Group - 6
  - RunTests
Group - 7
  - CleanDocs
Group - 8
  - Docs
Group - 9
  - ReferenceDocs
Group - 10
  - GenerateDocs
Group - 11
  - NuGet
Group - 12
  - All
Starting target 'Clean'
Finished (Success) 'Clean' in 00:00:00.0071921
Starting target 'AssemblyInfo'
Finished (Success) 'AssemblyInfo' in 00:00:00.0462503
Starting target 'Restore'
Starting task 'DotNet:restore': fss.sln
If you encounter msbuild errors make sure you have copied the required SDKs, see https://github.com/Microsoft/msbuild/issues/1697
C:\extproj\ProjectScaffold> "C:\Program Files\dotnet\dotnet.EXE" msbuild /version /nologo (In: false, Out: true, Err: true)
16.5.0.12403
C:\extproj\ProjectScaffold> "C:\Program Files\dotnet\dotnet.EXE" restore fss.sln /nodeReuse:False "/bl:C:\Users\daz\AppData\Local\Temp\tmpB8B5.tmp.binlog" (In: false, Out: false, Err: false)
C:\Program Files\dotnet\sdk\3.1.201\MSBuild.dll -nologo -distributedlogger:Microsoft.DotNet.Tools.MSBuild.MSBuildLogger,C:\Program Files\dotnet\sdk\3.1.201\dotnet.dll*Microsoft.DotNet.Tools.MSBuild.MSBuildForwardingLogger,C:\Program Files\dotnet\sdk\3.1.201\dotnet.dll -maxcpucount -target:Restore -verbosity:m /bl:C:\Users\daz\AppData\Local\Temp\tmpB8B5.tmp.binlog /nodeReuse:False fss.sln
  Restore completed in 45.27 ms for C:\extproj\ProjectScaffold\tests\fss.Tests\fss.Tests.fsproj.
  Restore completed in 44.09 ms for C:\extproj\ProjectScaffold\src\fssConsole\fssConsole.fsproj.
  Restore completed in 44.09 ms for C:\extproj\ProjectScaffold\src\fss\fss.fsproj.
Finished (Success) 'DotNet:restore' in 00:00:02.5443836
Finished (Success) 'Restore' in 00:00:02.5454715
Starting target 'Build'
Starting task 'MSBuild': fss.sln
> "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe" /version /nologo (In: false, Out: true, Err: true)
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe fss.sln /t:Build /m /nodeReuse:False /v:q /p:RestorePackages=False /p:Optimize=True /p:DebugSymbols=True /p:Configuration=Release "/bl:C:\Users\daz\AppData\Local\Temp\tmpC27A.tmp.binlog"
C:\extproj\ProjectScaffold> "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe" fss.sln /t:Build /m /nodeReuse:False /v:q /p:RestorePackages=False /p:Optimize=True /p:DebugSymbols=True /p:Configuration=Release "/bl:C:\Users\daz\AppData\Local\Temp\tmpC27A.tmp.binlog" (In: false, Out: false, Err: false)
Microsoft (R) Build Engine version 16.5.0+d4cbfca49 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe /bl:C:\Users\daz\AppData\Local\Temp\tmpC27A.tmp.binlog /m /nodeReuse:False /p:RestorePackages=False /p:Optimize=True /p:DebugSymbols=True /p:Configuration=Release /t:Build /v:q fss.sln
C:\extproj\ProjectScaffold\src\fss\fss.fsproj : error MSB4057: The target "Build" does not exist in the project.
C:\extproj\ProjectScaffold\src\fssConsole\fssConsole.fsproj : error MSB4057: The target "Build" does not exist in the project.
C:\extproj\ProjectScaffold\src\fssConsole\fssConsole.fsproj : error MSB4057: The target "Build" does not exist in the project.
C:\extproj\ProjectScaffold\src\fss\fss.fsproj : error MSB4057: The target "Build" does not exist in the project.
C:\extproj\ProjectScaffold\src\fss\fss.fsproj : error MSB4057: The target "Build" does not exist in the project.
: C:\extproj\ProjectScaffold\src\fss\fss.fsproj(0,0): error MSB4057: The target "Build" does not exist in the project.
: C:\extproj\ProjectScaffold\src\fssConsole\fssConsole.fsproj(0,0): error MSB4057: The target "Build" does not exist in the project.
Finished (Failed) 'MSBuild' in 00:00:01.0206622
Finished (Failed) 'Build' in 00:00:01.0223196

---------------------------------------------------------------------
Build Time Report
---------------------------------------------------------------------
Target          Duration
------          --------
Clean           00:00:00.0032040
AssemblyInfo    00:00:00.0461958
Restore         00:00:02.5453931
Build           00:00:01.0222261   (Exception of type 'Fake.DotNet.MSBuildException' was thrown.)
CopyBinaries    00:00:00           (skipped)
RunTests        00:00:00           (skipped)
CleanDocs       00:00:00           (skipped)
Docs            00:00:00           (skipped)
ReferenceDocs   00:00:00           (skipped)
GenerateDocs    00:00:00           (skipped)
NuGet           00:00:00           (skipped)
All             00:00:00           (skipped)
Total:          00:00:03.7738034
Status:         Failure
---------------------------------------------------------------------
Script reported an error:
-> BuildFailedException: Target 'Build' failed.
-> One or more errors occurred. (Exception of type 'Fake.DotNet.MSBuildException' was thrown.)
-> MSBuildException: Exception of type 'Fake.DotNet.MSBuildException' was thrown.
Hint: To further diagnose the problem you can run fake in verbose mode `fake -v run ...` or set the 'FAKE_DETAILED_ERRORS' environment variable to 'true'
Hint: Could not find a version in your paket.dependencies file, consider adding 'version 5.245.1' at the top of your dependencies file (C:\extproj\ProjectScaffold\paket.dependencies).
Read https://github.com/fsharp/FAKE/issues/2193 for details.
Performance:
 - Cli parsing: 277 milliseconds
 - Packages: 206 milliseconds
 - Script analyzing: 75 milliseconds
 - Script running: 3 seconds
 - Script cleanup: 9 milliseconds
 - Runtime: 6 seconds
daz10000 commented 4 years ago

As a workaround, there is commented out section of the build target in the generated template. If you uncomment that, and comment out the active portion like so, it seems to work. Suggest fixing the template to use the commented out version? Not sure why it's like that. Happy to send a PR if people agree that's preferable? Looking at it, it seems like the dotnet build process is working for me but not the MSBuild call. Your experience might vary depending on which SDK you have installed. My 2020 motto is torch .Netxxx support - it's holding everyone back at this point, but YMMV.


Target.create "Build" (fun _ ->
    solutionFile
    |> DotNet.build (fun p ->
        { p with
            Configuration = buildConfiguration })
    (*

    let setParams (defaults:MSBuildParams) =
        { defaults with
            Verbosity = Some(Quiet)
            Targets = ["Build"]
            Properties =
                [
                    "Optimize", "True"
                    "DebugSymbols", "True"
                    "Configuration", configuration
                ]
         }
    MSBuild.build setParams solutionFile
    *)
)```
Krzysztof-Cieslak commented 4 years ago

I don't think this project is maintained any more - I'd recommend using https://github.com/TheAngryByrd/MiniScaffold or https://github.com/ionide/Waypoint instead.

Hey, @forki maybe we should somehow formalize that by putting huge info in the readme?

daz10000 commented 4 years ago

That's too bad - was trying to upgrade an old project based on this and hoping I could drop a fresh checkout onto the old one. That's part of the problem with using scaffolds etc - it's a fast way to get started but you kind of get locked in to the infrastructure. Right now the project and tests themselves build with just vanilla dotnet tooling but all the other housekeeping like release notes, and packaging and docs depend on getting some now spider web encrusted scripts updated.

wallymathieu commented 4 years ago

Or perhaps revamp this project?

daz10000 commented 4 years ago

fWiw I moved ahead with mini scaffold and it was fairly painless and nicely built into dotnet template system. Would recommend trying that. I’m all for maintaining fewer better pieces of code (this was great but some benefit to focusing on a few things and mini scaffold seems better set for dotnet core)

Von meinem iPhone gesendet

Am 16.05.2020 um 9:45 AM schrieb Oskar Gewalli notifications@github.com:

 Or perhaps revamp this project?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

wallymathieu commented 4 years ago

Looks like there hasn't been any accepted pull requests in a while, so let's ask about in the f# projects channel.