F# nie widzi kodu w kilku plikach

Podczas przerabiania świetnego kursu „A Functional Architecture with F#” autorstwa Marka Seemana natknąłem się na osobliwy problem. Po dodaniu pliku kontrolera (Controller.fs), pliku z typami (Rendition.fs) oraz użycia w kontrolerze typu zdefiniowanego na zewnątrz kompilator zaczął krzyczeć, że nie widzi zdefiniowanego typu. Pozornie wszystko wygląda dobrze. Nazwy są takie same, namespace też się zgadzają.


namespace Ploeh.Samples.Booking.HttpApi

open System
open System.Net
open System.Net.Http
open System.Web.Http

type HomeController() =
    inherit ApiController()
    member this.Get() = new HttpResponseMessage()

type ReservationsController() =
    inherit ApiController()

    member this.Post (rendition : MakeReservationRendition) =
        new HttpResponseMessage(HttpStatusCode.Accepted)

Powyżej znajduje się kod kontrolera (Controller.fs). Visual Studio podkreśla MakeReservationRendition i mówi, że ten typ nie jest zdefiniowany. Ale jest. Poniżej kod tego typu zapisany w pliku Rendition.fs.


namespace Ploeh.Samples.Booking.HttpApi

open System

[<CLIMutable>]
type MakeReservationRendition = {
    Date : string
    Name : string
    Email : string
    Quantity : int }

Jak widać namespace się zgadza, więc kod powinien kompilować się bez problemów. Jednak tak nie jest. Zacząłem więc porównywać mój kod z plikami dostępnymi na Pluralsight. Niby wszystko jest tak samo. Przyszło mi na myśl, żeby zobaczyć co się dzieje w plikach projektu (fsproj). Podejrzanie wyglądał fragment ItemGroup.


<ItemGroup>
    <Compile Include="AssemblyInfo.fs" />
    <Compile Include="Infrastructure.fs" />
    <Content Include="packages.config" />
    <Compile Include="Controller.fs" />
    <Compile Include="Rendition.fs" />
</ItemGroup>

W plikach autora Rendition.fs znajdował się nad Controller.fs. Zamieniłem więc kolejność u siebie. Bingo! Wszystko zaczęło działać.

C# takich problemów nie ma, więc jest to zaskakujący problem. Oczywiście jest to rozwiązanie doraźne, które przynajmniej pozwoli mi kontynuować kurs.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

*
*
Website