只有1个主方法的XUnit测试项目:"程序定义了多个入口点."

J.D*_*len 7 c# xunit .net-core visual-studio-2017

我将vNext格式的.NET xUnit测试项目(带有project.json)转换为Visual Studio 2017 RC中的新.csproj格式,并开始收到以下错误.这个错误的大多数在线答案都说"你有两个主要方法;摆脱一个." 这似乎是一个明显的解决方案,但这个项目只有一个Main方法.

错误:

CS0017程序定义了多个入口点.使用/ main编译以指定包含入口点的类型.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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

老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": {}
  }
}
Run Code Online (Sandbox Code Playgroud)

新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>
Run Code Online (Sandbox Code Playgroud)

J.D*_*len 12

这需要一点时间来修补.在VS 2017中迁移到新的项目格式后,Microsoft悄悄地添加了一个依赖项Microsoft.NET.Test.Sdk,我相信它有自己的Main方法.

如果您在VS 2017 RC中创建了一个新的xUnit测试项目以及您已迁移的项目,您将注意到它不再使用调用XUnit运行器的Main方法创建Program.cs.

要解决此问题,请删除唯一可见的Main方法.你的测试仍然执行正常的,只要你有上面的包的引用(Microsoft.NET.Test.Sdk,xunit.runner.visualstudio,xunit).


Dav*_*eer 8

因为当你有一个带有测试的控制台应用程序时,我更喜欢这个:

tl;博士; <GenerateProgramFile>false</GenerateProgramFile> inside a <PropertyGroup>在测试项目的 .csproj 文件中添加元素。

从:

https://andrewlock.net/fixing-the-error-program-has-more-than-one-entry-point-defined-for-console-apps- contains-xunit-tests/