Спецификация сборки c Проект Visual Studio в рамках проектного решения с использованием Msbuild и devenv - PullRequest
0 голосов
/ 20 января 2020

У меня есть решение Visual Studio Project, которое имеет несколько .csproj. Каждый .csproj имеет несколько справочных библиотек. Настройки проекта выполняются таким образом, что сначала создаются справочные библиотеки, а затем - .csproj. Это работает, как и ожидалось, когда я запускаю его в Visual Studio IDE. Но когда я пытаюсь выполнить с помощью msbuild, я получаю сообщение об ошибке, что цель не существует. Пролистал много постов, связанных с этой проблемой, пробовал возможные вещи. Но не построил. Похоже, я мог делать что-то глупое или чего-то не хватает в настройках.

Также пытался использовать devenv из командной строки. С этой опцией я не вижу никаких ошибок, но в то же время проект не создается. Я не вижу никаких сообщений после выполнения команды. Я использую visual studio 2015

Here is my project structure
 Poject.sln
   ProjectA
   porjectB
   projectC
   Libraries
      libA
      libB

msbuild "project.sln" target:"D:\Projects\Source\Demo\ProjectA\ProjectA.csproj" /t:build 
 "/p:Configuration=Debug" "/p:platform=x86"

I see the below error
"D:\project.sln" (D:\Projects\Source\Demo\ProjectA\;build target) (1) ->
 D:\project.sln.metaproj : error MSB4057: The target "D:\Projects\Source\Demo\ProjectA" does not exist in the project. [D:\project.sln]

Here is the command used using devenv
devenv.exe "project.sln" /build Debug /project `"D:\Projects\source\Demo\Applications\ProjectA\ProjectA.csproj" /projectconfig Debug

 After executing the above its doesnt build and i dont see any error too.

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Файл "/Users/morel893/Desktop/env/lib/python3.7/site-packages/django/db/backends/utils.py", строка 84, в _execute возвращает self.cursor.execute (sql, params) django .db.utils.ProgrammingError: отношение "projects_project" не существует LINE 1: ... ct "." Technology "," projects_project "." Image "FROM" projects _...

0 голосов
/ 21 января 2020

ошибка MSB4057: Цель "D: \ Projects \ Source \ Demo \ ProjectA" не существует в проекте.

Ошибка указывает, что ваш путь в команде недопустим и project.sln не может распознать путь. Таким образом, вы на самом деле встречаете одну проблему, связанную с путем. И вы должны передать ProjectA аргументу целей вместо ProjectA.csproj! Подробнее см. Tip3 в Для MSBuild .

Для MSBuild:

1.Если вы только пытаетесь собрать ProjectA и его справочные библиотеки .

Перейдите (cd) к пути, где существует ProjectA.csproj, и затем используйте команду msbuild ProjectA.csproj /t:build /p:Configuration=Debug /p:platform=x86

Также вы можете напрямую использовать команду msbuild AbsolutePath\ProjectA.csproj /t:build /p:Configuration=Debug /p:platform=x86. Нет необходимости использовать " для покрытия пути и аргументов.

(файл ProjectA.csproj должен содержать определения относительно ссылки на эти два библиотечных проекта, поэтому msbuild ProjectA.csproj сначала создаст эти два проекта. не нужно указывать xx.sln в вашей команде.)

2.Если вы пытаетесь построить полное решение (все проекты):

msbuild project.sln /t:build /p:Configuration=xxx /p:platform=xxx

Перейдите к решению папку, когда вы запускаете команду, указанную выше, или используйте absolutepath\project.sln с этой командой.

3. Когда вы хотите построить конкретные c проекты (более одного) в решении:

Check Как: построить Specifi c целей в решениях с помощью MSBuild.exe . Поскольку вы только строите ProjectA, вам не нужно использовать этот формат. Например: только когда вам нужно построить ProjectA и ProjectB, но не построить Project C ... Вы можете использовать команду, например:

msbuild xxx.sln /t:NotInSlnfolder:Build;NewFolder\InSolutionFolder:Build  

Обратите внимание на путь при использовании этого формата. Находится ли ваш проект в папке решений, может сильно повлиять на результат сборки! И, прямая причина вашей проблемы, аргумент этой команды targets требует один ProjectName в качестве ввода вместо ProjectName.csproj.

Для команды Devenv:

1. Я всегда использую VS2017 и VS2019, поэтому я не уверен, что команда VS2015, связанная с devenv, имеет большое отличие от команд VS2017 или VS2019. Но в соответствии с подробностями из этого документа VS2017 :

Команды, начинающиеся с devenv, обрабатываются утилитой devenv.com, которая обеспечивает вывод через стандартные системные потоки, такие как stdout и STDERR. Кроме того, команды, начинающиеся с devenv.exe, могут использовать те же параметры, но утилита devenv.com обойдена. Непосредственное использование devenv.exe предотвращает появление вывода на консоли .

Я думаю, поэтому вы не видите никаких сообщений после выполнения команды. Вы должны использовать команду devenv.com, чтобы увидеть вывод в консоли. И по замыслу devenv.exe будет препятствовать выводу вывода на консоль.

2. Следующая команда создает проект CSharpWinApp, используя Debug конфигурацию сборки проекта в MySolution.

devenv "%USERPROFILE%\source\repos\MySolution.sln" /build Debug /project "CSharpWinApp\CSharpWinApp.csproj" /projectconfig Debug

Подробнее о devenv справке, пожалуйста, проверьте этот документ .

Кроме того:

1. Выглядит как у вас есть одна странная структура проекта. Я проверил ваше сообщение об ошибке выше, и кажется, что несколько ваших проектов (xx.csproj) не находятся в папке Solution (xx.sln). Просто предложение, нормальная структура папок для VS2015 всегда такова:

Solution folder
     xx.sln
     ProjectA folder
         ProjectA.csproj
     ProjectB folder
         ProjectB.csproj

2. Для большинства проектов сборка с использованием msbuild является более мощной и удобной, чем сборка с использованием devenv. Поэтому, если у вас нет особых причин, я рекомендую использовать Msbuild, движок сборки VS.

Надеюсь, все вышеперечисленное поможет решить вашу проблему и загадку. Дайте мне знать, если ваша проблема не устранена:)

...