在 .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
我该如何解决这个问题?
我必须添加其他项目来测试它们。
我尝试过但没有奏效的方法
- 我尝试添加与核心项目相同的依赖项
- 升级sdk版本到4.5.2
- 将
false 属性 添加到 属性 组
- 重新生成整个项目
测试项目文件夹名称为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(这是完全可行的)。
我正在做一个项目,此时出现错误。如果我在名为 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
我该如何解决这个问题? 我必须添加其他项目来测试它们。
我尝试过但没有奏效的方法
- 我尝试添加与核心项目相同的依赖项
- 升级sdk版本到4.5.2
- 将
false 属性 添加到 属性 组 - 重新生成整个项目
测试项目文件夹名称为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(这是完全可行的)。