在C#项目中构建2个程序

时间:2019-07-06 13:04:51

标签: c# .net-core csproj

简短版本

在由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.csB.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.exeB.exe(或与目标平台最接近的等效项)。

我希望我必须进行一些简单的*.csproj编辑,但是我只知道dotnet new创建了该文件,然后将dotnet add package放在了PackageReference中。实际的构建规则隐藏在Sdk中,我不知道如何控制它的作用。

相关问题

This question看起来和我的一样,但是被接受的答案只能构建其中一个程序。

2 个答案:

答案 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>

在项目文件中。

这还将使用已刷新的项目来构建所有项目。