W ciągu ostatnich kilku dni wypróbowywałam nowy interfejs .NET CLI i chociaż tworzenie aplikacji konsolowych i internetowych jest dość proste, nie jest wcale oczywiste, jak zbudować bibliotekę klas.Biblioteka klas z .NET CLI
Zrobiłem: jak zwykle, w linii poleceń użyłem dotnet new
do utworzenia pliku project.json
. W tym projekcie zakodowałem prostą klasę i nic więcej.
Następnie utworzyłem aplikację konsolową z interfejsem .NET CLI, która zawierała pierwszą jako zależność od project.json
i wykorzystała klasę, którą zbudowałem w bibliotece klas, aby wyświetlić komunikat na ekranie.
Kiedy próbowałem uruchomić aplikację konsolową, znajdował się drugi projekt i próbował go zbudować interfejs. Kompilacja biblioteki klas nie powiodła się z komunikatem:
Program nie zawiera statycznej metody "Głównej" odpowiedniej dla punktu wejścia.
W tym przypadku traktował projekt jako aplikację konsolową i próbował znaleźć główny punkt wejścia.
wierzę, że to się stało, bo kiedy stworzył bibliotekę klas z komendy dotnet new
to wygenerował project.json
następująco:
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0-*"
}
},
"frameworks": {
"netcoreapp1.0": {}
}
}
Patrząc tam wierzę, że może być dwa powody: jeden z nich to, że środowisko wykonawcze to Microsoft.NETCore.App
, a drugie TFM.
Próbowałem zmienić TFM na netstandard1.5
, ale nie zadziałało, podając ten sam błąd. W takim przypadku uważam, że problem dotyczy środowiska wykonawczego. Jakoś wierzę, że w zależności od Microsoft.NETCore.App
sugerujemy, że tworzymy aplikację konsolową, a nie bibliotekę, a następnie wymagany jest jeden punkt wejścia.
W jaki sposób należy budować bibliotekę klas z interfejsem .NET Core CLI? Czy to naprawdę problem w środowisku wykonawczym? Jeśli tak, jak sobie z tym poradzić?
Czy próbowałeś ustawić 'emisEntryPoint' na false? –
Alternatywnie próbowałeś utworzyć bibliotekę za pomocą 'dotnet new -t lib'. Ponieważ [typ konsoli jest domyślny.] (Https://github.com/dotnet/cli/tree/rel/1.0.0/src/dotnet/commands/dotnet-new) –
Dzięki za sugestię @mikez, to rzeczywiście działa. Ustawienie go na "false" rozwiązuje problem z wymaganiem jednego punktu wejścia. Próbowałem tego 'dotnet new -t lib', ale to nie działa. Stwierdza, że dostępne typy dla C# to po prostu konsola. – user1620696