2016-10-12 3 views
-1

Я работаю над 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. Но это еще одна история ...

+1

Прочтите сообщение об ошибке, его состояние указано. ASP.NET Core Web - это приложение, и каждому приложению нужна точка входа. Посмотрите пример ASP.NET Core MusicStore: https://github.com/aspnet/MusicStore/blob/dev/samples/MusicStore/Program.cs#L10 – Tseng

+0

Ну, точка входа веб-api - это класс запуска – hsop

+2

Нет , это не. Посмотрите пример кода. Код в основном методе вызывает класс запуска, см. Здесь https://github.com/aspnet/MusicStore/blob/dev/samples/MusicStore/Program.cs#L20. Вы путаете это с DNX. Ранние версии DNX не имели точки входа, поскольку DNX был точкой входа и обеспечивал загрузку фреймворка. dotnet-cli отличается. Все необходимое загружается в основной метод, поэтому основной метод ** обязателен ** в основных приложениях ASP.NET – Tseng

ответ

0

Он отвечает, что ответ лежит вне кода и не связан с msbuild, но для понимания того, что мне пришлось пройти еще несколько шагов. На основе комментариев @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. Чистая проверка в TeamCity решила проблему.

+0

Мое обновление теперь отправлено как ответ. – hsop

0

вы использовали MSBuild из «MSBuild командной строки для VS2015»?

Если это так, переменные среды в вашем сервере сборки может потребоваться конфигурацию.

MSBuild Командная строка использует эту командную строку (% comspec%/k "" C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ Tools \ VsMSBuildCmd.bat "") в итериализировать окружающую среду.

Возможно, вам понадобится подготовить среду командной строки на сервере сборки, чтобы получить тот же результат.

+0

Я использую обычную командную строку Windows на обеих машинах. – hsop

Смежные вопросы

 Смежные вопросы