2016-04-17 12 views
6

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ć?

+2

Czy próbowałeś ustawić 'emisEntryPoint' na false? –

+0

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) –

+0

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

Odpowiedz

2

Dwa problemy to: "emitEntryPoint": true oraz sekcja dependencies.

Biblioteka klas nie będzie mieć punktu wejścia (metoda static void Main()), więc emitEntryPoint należy ustawić na wartość false.

chodzi o zależności, można kierować wymaganych zależności specjalnie

"dependencies" : { 
    "System.Console": "4.0.0-*" 
} 

lub pakiet NETStandard.Library Nuget

"dependencies" : { 
    "NETStandard.Library": "1.5.0-*" 
} 

Pakiet NETStandard.Library nie jest dostępny od Nuget jeszcze tak musisz kierować MyGet, dopóki nie zostanie oficjalnie zwolniony. Upuść następujące elementy w pliku NuGet.config w folderach projektu

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <packageSources> 
    <clear /> 
    <add key="AspNetCI" value="https://www.myget.org/F/aspnetcirelease/api/v3/index.json" /> 
    <add key="NuGet.org" value="https://api.nuget.org/v3/index.json" /> 
    </packageSources> 
</configuration> 
Powiązane problemy