2017-02-21 8 views
3

Visual Studio 2017 RCでvNext形式の.NET xUnitテストプロジェクト(project.json)を新しい.csproj形式に変換し、以下のエラーが発生しました。このエラーのオンライン回答のほとんどは、 "あなたは2つの主要な方法を持っています。これは明らかな解決策のようですが、このプロジェクトにはメインメソッドが1つしかありません。XUnitテストプロジェクトは1つしかありませんメインメソッド: "プログラムに複数のエントリポイントが定義されています。"

エラー:

CS0017 Program has more than one entry point defined. Compile with /main to specify the type that contains the entry point. Project.Name C:\path\to\Program.cs

のProgram.cs:

using XunitProgram = Xunit.Runner.DotNet.Program; 

namespace My.Namespace.Tests 
{ 
    public static class Program 
    { 
     public static void Main(string[] args) 
     { 
      XunitProgram.Main(args); 
     } 
    } 
} 

旧project.json:

{ 
    "version": "1.0.0-*", 
    "testRunner": "xunit", 
    "buildOptions": { 
     "emitEntryPoint": true, 
     "preserveCompilationContext": true, 
     "debugType": "full" 
    }, 

    "dependencies": { 
     "dotnet-test-xunit": "2.2.0", 
     "xunit": "2.2.0", 
     "Microsoft.DotNet.InternalAbstractions": "1.0.0" 
    }, 
    "frameworks": { 
    "net462": {} 
    } 
} 

新Project.csproj:

<Project Sdk="Microsoft.NET.Sdk"> 

    <PropertyGroup> 
     <TargetFramework>net462</TargetFramework> 
     <RuntimeIdentifier>win7-x86</RuntimeIdentifier> 
     <DebugType>full</DebugType> 
     <PreserveCompilationContext>true</PreserveCompilationContext> 
     <AssemblyName>My.Project.Tests</AssemblyName> 
     <OutputType>Exe</OutputType> 
     <PackageId>My.Project.Tests</PackageId> 
     <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> 
     <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> 
     <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> 
     <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> 
     <RootNamespace>My.Project.Tests</RootNamespace> 
     <StartupObject /> 
    </PropertyGroup> 

    <ItemGroup> 
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0-preview-20170106-08" /> 
     <PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" /> 
     <PackageReference Include="xunit" Version="2.2.0" /> 
    </ItemGroup> 

    <ItemGroup Condition=" '$(TargetFramework)' == 'net462' "> 
     <Reference Include="System" /> 
     <Reference Include="Microsoft.CSharp" /> 
    </ItemGroup> 

    <ItemGroup> 
     <Folder Include="SampleInput\" /> 
    </ItemGroup> 

</Project> 

答えて

6

これは把握していじっのビットを取りました。 VS 2017の新しいプロジェクト形式に移行すると、Microsoftは自分自身のMainメソッドを持っていると確信して、Microsoft.NET.Test.Sdkの依存関係を静かに追加しました。

VS 2017 RCで新しいxUnitテストプロジェクトをマイグレーションした後に作成すると、XUnitランナーを呼び出すMainメソッドでProgram.csが作成されなくなります。

これを修正するには、表示可能なメインメソッドを削除します。上記のパッケージリファレンス(Microsoft.NET.Test.Sdkxunit.runner.visualstudioxunit)を持っていれば、テストは通常​​どおり実行されます。

+1

ありがとう。私はVS2017で開いたばかりのMSTestを使ったプロジェクトを持っていて、同じ問題を表示したcsprojに移行しました。 – Nick

+1

ありがとう!私は内部のもののために私のWebアプリケーションに焼き込まれたxunitテストを持っており、これまで合理的な説明がなくこれを得ました。 – Yablargo

0

私のxunitプロジェクト(タイプnetcoreapp)には、mainメソッドがありません。主な方法はxunitによって提供されています。最初にproject.jsonにProgram.csという名前を付ける必要はありませんでした。さて、csprojでは、これはエラーになっているようです。

documentationを参照し、メインを検索してください。

+0

このメッセージはまだ発生しません。すべてのコンソールプロジェクトにxunitテストとmainメソッドを含めることはできませんか? – MushyPeas

+1

プロジェクトがソフトウェアモジュール(.NETのアセンブリ)を反映しているため、いいえ。ユニットテストは、例えば、次のような開発アーチファクトである。ビルドファイル。彼らは通常、そこで目的を達成しないためにリスクを導入するため、運用環境に導入すべきではありません。 – Thomas

0

私も同様の問題がありました。 AddCommandLine(args)設定オプションがConfigurationBuilderに追加されているかどうかを確認してください。

var config = new ConfigurationBuilder() 
      .AddCommandLine(args) 
      .AddEnvironmentVariables(prefix: "ASPNETCORE_") 
      .Build(); 

エントリを削除します。これは私の問題を引き起こしていた...

希望するそれは助けることを望む

関連する問題