c# - 在 .Net xUnit 项目中,当我运行测试时,我收到“程序不包含静态‘主’”错误,因为我引用了其他项目将被测试
问题描述
我正在做一个项目,此时出现错误。如果我在名为 ECommercial.Core 的 xunit 测试项目中添加对其他项目的引用,则会收到入口点错误。没有循环引用之类的。在其他问题上,人们会误认为主方法不止一个,但对我来说,错误是有任何主方法。如果我从测试项目中删除参考,就会有任何问题。测试方法是空的,没有什么会导致方法内部的错误。这是错误消息。
错误信息
----- 在“ECommercial.DataAccess.Tests.UnitTest1”类中运行测试 ----- 对于 .NET Microsoft (R) Build Engine 版本 16.7.0+7fb82e5b2
CSC:错误 CS5001:程序不包含适合 > > 用于入口点的静态“主要”方法 [c:\Users\nihaSWin\Desktop\ECommercial\ECommercial.Core\ECommercial.Core.csproj]
构建失败
CSC:错误 CS5001:程序不包含适用于入口点的静态“主要”方法 [c:\Users\nihaSWin\Desktop\ECommercial\ECommercial.Core\ECommercial.Core.csproj] 0 警告 1 错误
运行时间 00:00:00.68
我怎样才能解决这个问题 ?我必须添加其他项目来测试它们。
我试过但没有用
- 我尝试添加与 Core 项目相同的依赖项
- 升级 sdk 版本到 4.5.2
- 将 <GenerateProgramFilefalse> false </GenerateProgramFile> 属性添加到属性组
- 重新生成整个项目
测试项目文件夹名称为 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 实体存储库文件。这是文件代码。
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(这是完全可行的)。
推荐阅读
- python - 创建多个不同比例的图像 PyTorch
- django - 在 Django 中的 mac 上查看“树”而没有看到 virtualenv 树
- javascript - 为什么 eval() 不适用于这种变量情况?
- hibernate - Hibernate 5 转换插入问题
- javascript - 我的代码在第 66 行被破坏,由于某种原因,我不断收到意外的令牌
- c - 如何使用 MPE 库打开 MPI 分析?
- r - 在 R 中有一种方法可以在 DBI 库中使用 dbWriteTable 实现应用函数,以一次将多个数据帧加载到 SQL 中
- javascript - 在反应路由后滚动到视图中
- java - 如何使用 hybris1905 正确使用服务?
- java - 从 java 连接到 salesforce 作为 SP