简短版本
在由dotnet new console
创建的C#项目中,所有*.cs
文件,甚至子目录中的文件,都被编译到一个程序中。如果有两个具有Main
函数的类,则无法构建。如何告诉我构建2个程序?
更多详细信息
作为C#和所有相关工具的新手,我遵循了教程,并学习了如何通过运行dotnet new console
,放入一些*.cs
文件并运行结果来创建最小项目。 dotnet run
进行编程。我什至用dotnet publish
作了一个可用的“发布”。所有这些都由此*.csproj
文件进行协调:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="12.0.2"/>
</ItemGroup>
</Project>
如果A.cs
和B.cs
都声明了Main
,则构建失败,并显示error CS0017: Program has more than one entry point defined. Compile with /main to specify the type that contains the entry point.
。因此,我知道有一个/main
选项,但是我不知道该放在哪里。 dotnet run /main A.cs
不是。
目标是拥有看起来像dotnet run /main A.cs
但确实有效的东西;并让dotnet publish
同时创建A.exe
和B.exe
(或与目标平台最接近的等效项)。
我希望我必须进行一些简单的*.csproj
编辑,但是我只知道dotnet new
创建了该文件,然后将dotnet add package
放在了PackageReference中。实际的构建规则隐藏在Sdk
中,我不知道如何控制它的作用。
相关问题
This question看起来和我的一样,但是被接受的答案只能构建其中一个程序。
答案 0 :(得分:2)
您必须具有两个单独的项目才能生成两个单独的EXE。共享代码通常会进入第三个都依赖的“库”项目中。尽管您可以使一个应用程序项目依赖于另一个应用程序,但这会有些奇怪。
答案 1 :(得分:1)
我认为您想引用另一个项目。您可以使用dotnet add reference
命令或此命令dotnet add [<PROJECT>] reference [-f|--framework] <PROJECT_REFERENCES>
,只需将PROJECT替换为项目名称,将PROJECT_REFERENCES替换为要引用的项目,或者直接键入项目引用即可。
<ItemGroup>
<ProjectReference Include="app.csproj" />
<ProjectReference Include="..\lib2\lib2.csproj" />
<ProjectReference Include="..\lib1\lib1.csproj" />
</ItemGroup>
在项目文件中。
这还将使用已刷新的项目来构建所有项目。