MSBuild ищет Main при создании проекта - PullRequest
0 голосов
/ 22 февраля 2020

Я работаю над большим проектом, который состоит из нескольких исполняемых файлов. Я хотел бы автоматизировать процесс развертывания, создав их все сразу. Вот почему я прибегнул к msbuild утилите командной строки.

Когда я собираю один из моих проектов в Visual Studio, он собирается нормально. Когда я пытаюсь сделать то же самое с помощью msbuild cmd, происходит сбой с ошибкой

CSC : error CS5001: Program does not contain a static 'Main' method suitable for an entry point [pathToLibrary.csproj]

Это код cmd:

msbuild MainProject.csproj -property:Configuration=Release -property:Platform="AnyCPU" -property:OutputType="WinExe" -target:"Rebuild"

pathToLibrary.csproj действительно библиотека, поэтому я не Не знаю, почему msbuild пытается найти основной метод. Здесь ничего нет. Это библиотека.

Что мне здесь не хватает?

1 Ответ

1 голос
/ 24 февраля 2020

pathToLibrary.csproj действительно библиотека, поэтому я не знаю, почему msbuild пытается найти метод main. Здесь ничего нет. Это библиотека.

Когда ваш основной проект ссылается на проекты по Add Reference -> Projects, он всегда будет создавать не только основные проекты, но и ссылочные проекты одновременно. Поэтому, когда вы строите этот проект с помощью командной строки MSBuild, -property:OutputType=winexe также будет применяться к этим ссылочным проектам. Когда вы создаете проект в VS IDE и MSBuild, вы увидите эту информацию в выходном журнале.

enter image description here

enter image description here

Если нет способа указать msbuild перезаписывать только OutputType для основного .csproj, редактирование каждого файла по отдельности должно будет сделать

Если вы просто хотите найти способ указать -property:OutputType=winexe для основного проекта, а не ссылочные проекты из командной строки MSBuild, я думаю, что нет такой функции.

Или вы можете попробовать мои предложения :

1) удалите -property:OutputType=winexe в командной строке MSBuild и при создании связанного проекта, вы уже указали тип вывода проекта, поэтому вам не нужно указывать его в MSBuild, который не является задачей MSBuild.

Примечание , что вы можете изменить свойство в xxx.csproj прямо как <OutputType>WinExe</OutputType>.

2) если вам все еще нужна эта функция при сборке проекта с помощью командной строки MSBuild, я предлагаю вам создать скрипт с именем Directory.Build.targets , который может перезаписать свойство OutputType и затем построить проект отдельно с помощью MSBuild.

~ a) , пожалуйста, создайте файл с именем Directory.Build.targets в каждая папка проекта, в которой существует файл xxxx.csproj.

~ b) записать в него связанное свойство о проекте: (используйте Exe в консольном проекте, используйте WinExe в windows проекте и используйте Library в проект библиотеки классов.)

 <Project>
    <Target Name="inputproperty" BeforeTargets="AssignProjectConfiguration">
    <PropertyGroup>
     <OutputType>WinExe</OutputType>
    </PropertyGroup>
    </Target>
    </Project>

напишите так в своем проекте MainProject , а затем создайте еще один Directory.Build.targets в своем проекте pathToLibrary для использования <OutputType>Library</OutputType> чтобы он оправдал ваши ожидания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...