Проектные ссылки вне решения в VS2010 - PullRequest
6 голосов
/ 16 сентября 2011

В соответствии с этим должна быть возможность ссылаться на проекты вне решения и работать в VS и командной строке, но не в TFS.

К сожалению, когда я попытался разбить свой разделТаким образом, оно не работало ни в VS2010 / devenv, ни в msbuild.

В обоих случаях ошибка была:

Свойство OutputPath не установлено для проекта Common.csproj.Пожалуйста, убедитесь, что вы указали правильную комбинацию конфигурации и платформы для этого проекта.Конфигурация = Платформа отладки = AnyCPU.Эта ошибка также может появляться, если какой-либо другой проект пытается следовать ссылке проекта на проект для этого проекта, этот проект был выгружен или не включен в решение, а ссылочный проект не создается с использованием того же или эквивалентногоКонфигурация или платформа.

Однако текущая платформа - "x86", и независимо от того, какую платформу и конфигурацию я установил в VS или msbuild, она всегда пытается Debug|AnyCPU.В случае msbuild, если я установил /p:OutputPath=bin\x86\Debug, он правильно распространяется на дочерние проекты.

Это ошибка, могу ли я обойти ее?

ОБНОВЛЕНИЕ

Обнаружена ошибка в MS Connect .К сожалению, закрыто как не удалось исправить: (*

ОБНОВЛЕНИЕ 2

Найден обходной путь: установите ShouldUnsetParentConfigurationAndPlatform=false. Как в командной строке для msbuild, так и в файле проекта (перед любымимпорт), чтобы исправить Visual Studio.

Ответы [ 2 ]

0 голосов
/ 24 января 2014

Я столкнулся с чем-то похожим в VS2012.Для меня это было связано со свойством ShouldUnsetParentConfigurationAndPlatform цели AssignProjectConfiguration , установленной на true во время сборки.Это привело к « GlobalPropertiesToRemove = Configuration; Platform », из-за которого свойства Configuration и Platform были очищены для ссылки на проект.

Я смог увидеть это, просмотрев выходные данные сборкиокно после настройки Tools -> Options -> Projects and Solutions -> Build and Run -> MSBuild, подробность сборки проекта -> Diagnostic.

При пустой конфигурации / платформе это вызвало следующую строку в некоторых из моихпроекты совпадают, что приводит к отладке сборок в выходных данных проекта даже в сборке выпуска:

<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

Решение состояло в том, чтобы изменить эти файлы csproj, указав Release как конфигурацию, используемую, когда переменная Configuration была пустойпусто:

<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
0 голосов
/ 17 сентября 2011

Если я правильно понимаю проблему, это на самом деле потому, что цель AssignProjectConfiguration неправильно устанавливает свойства конфигурации / платформы для этих проектов.

Если вы знаете, какими должны быть их конфигурации и платформы, вы всегда можете простовнедрить цель для запуска сразу после цели AssignProjectConfiguration и переопределить свойства SetConfiguration и SetPlatform для каждого элемента, представляющего неразрешенную (т.е. не являющуюся частью конфигурации решения) межпроектную ссылку.

По какой-то глупой причинеПредоставленная Microsoft цель хранит список неразрешенных ссылок на проекты в той же коллекции, что и разрешенные (но нигде больше), что дает вам 2 варианта:

  1. Просто установите свойства каждого проекта вручную (т.е.жесткое кодирование через динамический элемент ItemGroup внутри вашей введенной цели).
  2. Вызовите задачу AssignProjectConfiguration самостоятельно из вашей введенной цели, соберите неназначенногоd выводит, чтобы назначить им конфигурацию / платформу по умолчанию на ваш выбор.

В любом случае, получив список правильно настроенных ссылок на проекты, вы можете просто заменить неразрешенные элементы в группе элементов ProjectReferenceWithConfiguration.с их измененными вручную аналогами (используя другой динамический элемент ItemGroup с удалением, а затем с включением).

Имейте в виду, я бы не поступил так, как вы.Если вы хотите разделить ваш продукт на несколько решений, то я бы просто предложил каждому решению публиковать общие результаты в общую область подготовки и иметь сценарии .proj, чтобы связать их вместе.Я усвоил сложный способ, которым MSBuild в стиле командной строки и MSBuild в стиле VS не смешиваются (они сделали несколько странных компромиссов для обеспечения взаимодействия с системами проектов, не относящимися к MSBuild, из которых вся AssignProjectConfiguration-with-VS-provided-solution-config-XML - это один процесс).

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