Visual Studio 2008: не удается найти ссылку на проект - PullRequest
1 голос
/ 22 июня 2011

У нас есть приложение, написанное на C #, которое разбито на несколько проектов.Эти проекты имеют ссылку на другие.

Когда кто-то получает источник из системы управления версиями и открывает решение, содержащее эти проекты на своем компьютере, Visual Studio не может найти ссылки между проектами, даже если ссылочный проект успешно создан.Этот человек должен повторно добавить ссылку, чтобы решить эту проблему.

Мне кажется, что Visual Studio хранит некоторые данные в файле "suo", поэтому в следующий раз она узнает, где найти эту повторно добавленную ссылку, и этопроблема не появится в следующий раз, когда человек откроет решение.

Поскольку файл `suo 'хранит абсолютный путь к ссылкам, мы не можем зафиксировать его в нашем контроле исходного кода.

Проблема в том, что мыУ нас есть отдельный компьютер, который автоматически создает это большое приложение (как наши ночные выпуски) Когда инструмент автоматизации сборки открывает решение и вызывает компилятор Visual Studio для его сборки, ссылки не могут быть найдены.(инструмент автоматизации все очищает и снова получает последнюю версию источника, поэтому у него нет файла `suo '.)

Любое решение?

Дополнительная информация

Версия Visual Studio: 2008 - 9.0.21022.8

.Net Framework: 3.5 SP1

ОС: Windows XP Professional (SP2 и SP3 - у нас есть оба)

Обновление

Кажется, что Visual Studio иногда меняет тег <ProjectReference> на <Reference> в файлах `.csproj '.Наши разработчики фиксируют файл, и эта проблема возникает.

Я не смог найти ошибку в Visual Studio.Единственное решение, которое приходит мне в голову, - это написать инструмент для исправления этого в файлах `.csproj ', прежде чем передавать его в инструмент автоматизации.

Ответы [ 4 ]

2 голосов
/ 22 июня 2011

Ссылки определены в файле .csproj для каждого проекта. Они могут быть определены одним из двух способов (по моему опыту).

Либо с путем подсказки, чтобы найти указанную сборку:

<Reference Include="CommonServiceLocator.NinjectAdapter, Version=2.2.0.0, Culture=neutral, processorArchitecture=MSIL">
  <HintPath>..\..\Dependencies\CommonServiceLocator.NinjectAdapter.dll</HintPath>
</Reference>

Или без одного:

<Reference Include="CommonServiceLocator.NinjectAdapter, Version=2.2.0.0, Culture=neutral, processorArchitecture=MSIL"/>

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

Вы можете редактировать файлы .csproj либо с помощью внешнего редактора, либо щелкнув правой кнопкой мыши по проекту, выбрав «Выгрузить проект» из контекстного меню, затем снова щелкнув правой кнопкой мыши по выгруженному проекту и выбрав «Изменить имя проекта.csproj» , После того, как вы закончите редактирование, снова щелкните правой кнопкой мыши и перезагрузите проект.

1 голос
/ 22 июня 2011

Откройте файлы проекта (* .csproj) и посмотрите, на что они ссылаются.В основном уверен, что пути относятся к пути решения, и ваш сценарий сборки может использовать другие пути.

Один из способов решения этой проблемы:

  1. Определите переменную среды SOURCE_PATH, которая содержит путь ккорневая папка ваших исходных файлов
  2. Отредактируйте файлы проекта, чтобы они имели ссылку относительно этого пути (используйте $(SOURCE_PATH)) в файлах csproj для ссылки на него
  3. Повторите шаги 1-2 для каждого разработчика / сборкидобавьте переменные env, если необходимо.

PS: * .suo не должно быть в системе управления версиями.

0 голосов
/ 16 июля 2011

Это ошибка в VisualStudio 2008 и ранее.

Если вы откроете решение, содержащее проект, имеющий ссылку на другой проект, но ссылочный проект не включен в решение, VS найдет ссылочнуюпроект, но изменяет ссылку так, чтобы она ссылалась на выходную DLL, а не на сам проект.

Эта ошибка исправлена ​​в VS2010 и MSBuild 4.

0 голосов
/ 22 июня 2011

Почему бы вам не использовать msbuild вместо автоматического компилятора visual studio?

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