Сборка 2 программ в проекте C # - PullRequest
1 голос
/ 06 июля 2019

Короткая версия

В проекте C #, созданном с помощью dotnet new console, все *.cs файлы, даже файлы в подкаталогах, скомпилированы в одну программу. Если есть 2 класса с 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, и я не знаю, как управлять тем, что он делает.

Смежный вопрос

Этот вопрос выглядит так же, как мой, но принятый ответ строит только одну из программ.

Ответы [ 2 ]

2 голосов
/ 06 июля 2019

У вас должно быть два отдельных проекта для создания двух отдельных EXE-файлов. Общий код обычно входит в третий «библиотечный» проект, от которого зависят оба. Хотя вы можете сделать один проект приложения зависимым от другого, но это будет немного странно.

1 голос
/ 06 июля 2019

Я думаю, что вы хотите сослаться на другой проект. Вы можете использовать команду 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>

в файле проекта.

Это также создаст весь проект с обновленным проектом.

...