【发布时间】:2019-12-26 00:15:38
【问题描述】:
我正在编辑我的问题,我认为这有点令人困惑,并且没有解释我的意图。
编辑:
我的目标是当我的HelloWorld 应用程序引用MyClassLibrary 时,我的代码不会编译,因此我确保在运行 main 方法之前初始化一些代码。 有点像类的构造函数。当我引用MyClassLibrary 时,我希望在运行HelloWorld 应用程序的main 方法之前在其中运行一些代码。 NUnit 具有类似的功能。当我的HelloWorld 应用程序引用 NUnit 时,我收到错误:Error CS0017 Program has more than one entry point defined. Compile with /main to specify the type that contains the entry point. 正如@Alex 指出的那样,NUnit 创建的 Main 方法是自动生成的。我想用一些自定义代码自动生成一个主方法。我怎样才能从 MyClassLibrary 做到这一点,而不像 NUnit 那样在我的 HelloWorld 应用程序上做任何事情?
老问题:
我想执行NUnit 测试执行的相同行为,它阻止使用Main 方法。在这种情况下,我需要的错误是一件好事。让我解释一下我的意思。
- 我创建了一个面向
.net core的 hello world 应用程序
项目文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
</Project>
代码文件:(默认hello world c#代码)
如果我随后运行该应用程序,它运行良好
添加对
NUnit的引用,我的项目文件现在包含。
.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NUnit" Version="3.12.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.13.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
</ItemGroup>
</Project>
- 当我尝试编译项目时出现错误:
错误 CS0017 程序定义了多个入口点。使用 /main 编译以指定包含入口点的类型。
这意味着还有另一个Main 方法。该方法可能位于我引用的NUnit nuget 包中。这是我试图复制的错误!
现在这就是我尝试复制相同错误的方式:
我在我的 hello world 应用程序中删除了没有引用
NUnit的NUnitnugget 包。使用以下代码创建项目
ClassLibrary1:
.
public class MyLib
{
static void Main()
{
Console.WriteLine("fooooo");
// do something
}
}
- 让我的 hello world 应用程序引用该项目:
即使有 2 个 Main 方法,我编译时也不会出错!
NUnit 如何防止使用Main 方法?如何复制相同的行为?我想创建一个程序集,当被引用时它会阻止执行Main 方法。
【问题讨论】:
-
这对我来说并不奇怪。您无法使用单元测试框架测试 exe 文件 - 测试框架是测试时的应用程序。
-
我不需要测试。我需要防止我的应用程序有一个 Main 方法 @500-InternalServerError
-
取决于项目类型,类库不会执行任何主要方法。但是像控制台项目这样的东西需要一个入口点
标签: c# .net-core compiler-errors compilation