2016-10-12 10 views
-1

大規模ソリューション内で他のプロジェクト(csproj)を参照するASP.NETコアWeb APIを使用しています。 ASP.NETコアのWeb APIは、「私のマシン上で」コマンドプロンプトでのMSBuildを使用して、Visual Studioの2015年に構築し、:-)ASP.NET Core Web API:プログラムにエントリポイントに適した静的な「Main」メソッドが含まれていません

msbuild SomeWebAPI.xproj 

    Compilation succeeded. 
    33 Warning(s) 
    0 Error(s) 

Time elapsed 00:00:01.7740626 

Done Building Project 
. 
. 
Build succeeded. 

問題は、それが私たちのビルドサーバー上に構築していないです。 「私のマシン上の」

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ビーイングではなく、私たちの上:同じMSBuildのコマンド、同じMSBuildのバージョン、異なる結果ビルドサーバーは私を困惑させる。助言がありますか? あなたはより多くの情報、コード、project.jsonまたは助けることができる何かを必要とする場合、あなたが:-)答えに私をリードし、私に知らせてください

更新:

@Tsengのコメントに基づいて、私は、起動時にmainメソッドを追加しました:

// 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を指摘しました。どうやら、2ヶ月前に私が使ったプロジェクトテンプレートは、メインクラスのメソッドをProgramクラスに入れました。明らかに、@ Tsengが正しいと私は間違っていた。残念ながら、それは私を元の質問に戻しました。なぜプロジェクトは私のマシン上に構築されますが、私たちのビルドサーバ上には構築されませんか? TeamCityのソース管理から何らかの理由でProgram.csファイルがチェックアウトされていないことを考えると、「Mainメソッド」が欠落しているという明白な答えです...

+1

エラーメッセージを読んでください。 ASP.NET Core Webはアプリケーションであり、すべてのアプリケーションにエントリポイントが必要です。 ASP.NET Core MusicStoreの例を見てください。https://github.com/aspnet/MusicStore/blob/dev/samples/MusicStore/Program.cs#L10 – Tseng

+0

ウェブAPIのエントリポイントはStartupクラスです – hsop

+2

いいえ、 そうではありません。サンプルコードを見てください。メインメソッドのコードがスタートアップクラスを呼び出しています。https://github.com/aspnet/MusicStore/blob/dev/samples/MusicStore/Program.cs#L20を参照してください。あなたはこれをDNXと混同しています。 DNXはエントリポイントであり、フレームワークのロードを提供したため、初期DNXバージョンにはエントリポイントがありませんでした。 dotnet-cliは異なります。必要なものがすべてメインメソッドにロードされます。そのため、MainメソッドはASP.NETコアアプリケーションの**必須**です。 – Tseng

答えて

0

答えはコードの外側にあり、msbuildとは関係ありませんが、私はもう少しステップを経なければならないことを認識しています。 @Tsengさんのコメントに基づいて、私は、起動時にmainメソッドを追加しました:

// 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(); 
} 

をしかし、私は自分のマシン上でプロジェクトをビルドすることができませんでした:Program.csのを指摘

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] 

上記のメインメソッドのほぼ正確なコピーを使用します。どうやら、2ヶ月前に私が使ったプロジェクトテンプレートは、メインクラスのメソッドをProgramクラスに入れました。明らかに、@ Tsengは正しい、私は間違っていた。残念ながら、それは私を元の質問に戻しました。なぜプロジェクトは私のマシン上に構築されましたが、私たちのビルドサーバ上には構築されませんでしたか?TeamCityのソース管理から何らかの理由でProgram.csファイルがチェックアウトされていなかったことを考えると、「主な方法がありません」という明白な答えは、実際には正しいです。 TeamCityのきれいなチェックアウトが問題を解決しました。

+0

私の更新版が回答として掲載されました。 – hsop

0
それがあなたのビルドサーバーでの環境変数は、いくつかの設定が必要になることがありそうであるならば

あなたは?「VS2015のためのMSBuildのコマンドプロンプト」から

をMSBuildのを使用しました。

MSBuildのコマンドプロンプトは、このコマンドラインを使用しています(%comspec%/ k "" C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ Tools \ VsMSBuildCmd.bat "")を環境を初期化する。

同じ結果を得るには、ビルドサーバーでコマンドライン環境を準備する必要があります。

+0

私は両方のマシンで通常のWindowsコマンドプロンプトを使用しています。 – hsop

関連する問題