Я работаю над ASP.NET Core Web API, который ссылается на другие проекты (csproj) в рамках большого решения. Web API ASP.NET Ядро создает в Visual Studio 2015 и с помощью MSBuild в командной строке «на моей машине» :-)ASP.NET Core Web API: программа не содержит статический метод «Главная», подходящий для точки входа
msbuild SomeWebAPI.xproj
Compilation succeeded.
33 Warning(s)
0 Error(s)
Time elapsed 00:00:01.7740626
Done Building Project
.
.
Build succeeded.
Проблема заключается в том, что не строит на нашем наращиванием сервере. То же MSBuild-команда, так же MSBuild-версия, другой результат:
msbuild SomeWebAPI.xproj
error CS5001: Program does not contain a static 'Main' method suitable for
an entry point [D:\TeamCity\buildAgent\work\8120f5584932b96b\S
SomeWebAPI\SomeWebAPI.xproj]
Compilation failed.
0 Warning(s)
1 Error(s)
Time elapsed 00:00:03.3428080
Done Building Project
"D:\TeamCity\buildAgent\work\8120f5584932b96b\SomeWebAPI\SomeWebAPI.xproj"
(default targets) -- FAILED.
Build FAILED.
Будучи WebAPI это не имеет никакого смысла, чтобы добавить статический метод «Main» и тот факт, что он работает «на моей машине», но не на нашем build-server меня озадачивает. Какие-либо предложения? Пожалуйста, дайте мне знать, если вам нужно больше информации, код, project.json или что-нибудь, что может помочь вам привести меня к ответу :-)
Update:
Основываясь на комментарий @Tseng «s Я добавил главный метод для запуска:
// Entry point for the application.
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseKestrel()
.UseStartup<Startup>()
.Build();
host.Run();
}
Но тогда я не могу построить проект на моей машине:
C:\test\path\SomeWebAPI\Program.cs(8,28): error CS0017: Program has more
than one entry point defined. Compile with /main to specify the type that
contains the entry point. [C:\test\path\SomeWebAPI\SomeWebAPI.xproj]
Это указало Program.cs с почти точной копией основного метода выше. По-видимому, шаблон проекта, который я использовал пару месяцев назад, поставил основной метод в классе программы. Очевидно, @Tseng прав, и я ошибся. К сожалению, это вернуло мне исходный вопрос. Почему проект строится на «моей машине», но не на нашем сервере сборки? Очевидный ответ: «Недопустимый метод« Main »на самом деле прав, учитывая, что по какой-то причине файл Program.cs не был извлечен из исходного кода TeamCity. Но это еще одна история ...
Прочтите сообщение об ошибке, его состояние указано. ASP.NET Core Web - это приложение, и каждому приложению нужна точка входа. Посмотрите пример ASP.NET Core MusicStore: https://github.com/aspnet/MusicStore/blob/dev/samples/MusicStore/Program.cs#L10 – Tseng
Ну, точка входа веб-api - это класс запуска – hsop
Нет , это не. Посмотрите пример кода. Код в основном методе вызывает класс запуска, см. Здесь https://github.com/aspnet/MusicStore/blob/dev/samples/MusicStore/Program.cs#L20. Вы путаете это с DNX. Ранние версии DNX не имели точки входа, поскольку DNX был точкой входа и обеспечивал загрузку фреймворка. dotnet-cli отличается. Все необходимое загружается в основной метод, поэтому основной метод ** обязателен ** в основных приложениях ASP.NET – Tseng