在 .Net xUnit 项目中,当我 运行 测试时出现 "Program does not contain a static 'Main'" 错误,因为我引用了其他项目将被测试

In .Net xUnit project when I run tests I get an "Program does not contain a static 'Main'" error because of I referenced other project will be tested

我正在做一个项目,此时出现错误。如果我在名为 ECommercial.Core 的 xunit 测试项目中添加对其他项目的引用,我会收到入口点错误。没有循环引用什么的。在其他问题上,人们会得到一个错误,即有多个主要方法,但对我来说,错误是有任何主要方法。如果我从测试项目中删除引用,就会出现任何问题。测试方法是空的,方法内部没有任何东西会导致错误。这是错误消息。

Error Messages

----- Running tests in class "ECommercial.DataAccess.Tests.UnitTest1" ----- For .NET Microsoft (R) Build Engine version 16.7.0+7fb82e5b2

CSC : error CS5001: Program does not contain a static 'Main' method suitable > > for an entry point [c:\Users\nihaSWin\Desktop\ECommercial\ECommercial.Core\ECommercial.Core.csproj]

Build is fail

CSC : error CS5001: Program does not contain a static 'Main' method suitable for an entry point [c:\Users\nihaSWin\Desktop\ECommercial\ECommercial.Core\ECommercial.Core.csproj] 0 Warning 1 Error

Running time 00:00:00.68

我该如何解决这个问题? 我必须添加其他项目来测试它们。

我尝试过但没有奏效的方法

  1. 我尝试添加与核心项目相同的依赖项
  2. 升级sdk版本到4.5.2
  3. false 属性 添加到 属性 组
  4. 重新生成整个项目

测试项目文件夹名称为ECommercial.DataAccess.Tests,里面只有UnitTest1.cs个项目。文件编码

using Xunit;
namespace ECommercial.DataAccess.Tests
{
public class UnitTest1
{

    [Fact]
    public void Get_Product_From_Table()
    {

    }
    [Fact]
    public void Get_Product_List_From_Table()
    {

    }
}
}

引用的Ecommercial.Core文件夹中只有IEntity空接口和NHibernate Entity Repository文件。这是文件代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using ECommercial.Core.DataAccess.NHibernate.Helpers;
using ECommercial.Core.Entities;

namespace ECommercial.Core.DataAccess.NHibernate
{
    public class NHibernateIEntityRepository<TEntity>:IEntityRepository<TEntity> 
        where TEntity:class,IEntity,new()
    {
        private NHibernateHelper _nHibernateHelper;

        public NHibernateIEntityRepository(NHibernateHelper nHibernateHelper)
        {
            _nHibernateHelper = nHibernateHelper;
        }

        public TEntity Add(TEntity entity)
        {
            using (var session=_nHibernateHelper.openSession()){
                session.Save(entity);
                return entity;
            }
        }

        public void Delete(TEntity entity)
        {
            using (var session=_nHibernateHelper.openSession()){
                session.Delete(entity);
            }
        }

        public TEntity Get(Expression<Func<TEntity, bool>> filter)
        {
            using (var session=_nHibernateHelper.openSession()){
                TEntity result = session.Query<TEntity>().SingleOrDefault(filter);
                return result;
            }
        }

        public List<TEntity> GetList(Expression<Func<TEntity, bool>> filter = null)
        {
            using (var session=_nHibernateHelper.openSession()){
                if(filter==null)
                    return session.Query<TEntity>().ToList();
                List<TEntity> result = session.Query<TEntity>().Where(filter).ToList();
                return result;
            }
        }

        public TEntity Update(TEntity entity)
        {
            using (var session=_nHibernateHelper.openSession()){
                session.Update(entity);
                return entity;
            }
        }
    }
}

核心项目 csproj 文件

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="NHibernate" Version="5.3.3"/> 
  </ItemGroup>
</Project>

测试项目csproj文件

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

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>

    <IsPackable>false</IsPackable>
    
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
    <PackageReference Include="xunit" Version="2.4.0" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
    <PackageReference Include="coverlet.collector" Version="1.2.0" />
  </ItemGroup>
  <ItemGroup>
  <ProjectReference Include="../ECommercial.Core/ECommercial.Core.csproj" />
  </ItemGroup>
</Project>

该问题与 NHibernate 或您的测试项目无关。您可以使用此项目文件简单地重现它:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>
</Project>

您甚至不需要任何 C# 代码。只是构建,你会得到同样的错误。

这是因为您的 SDK 类型是 Web SDK,它要求您的项目是可执行文件。

选项:

  • 将您的 SDK 类型(在 Sdk 属性中)更改为“Microsoft.NET.Sdk”
  • <OutputType>Library</OutputType> 添加到 属性 组

您只需要其中的 一个 - 我会使用第一个,除非您出于某种原因需要使用 Web SDK(这是完全可行的)。