У меня есть файл структура, как следующие:Как программно обновить ссылки на проекты в Visual Studio проекте
- binaries
- binary1.dll
- dev
- <developer-name>
- a.csproj
-trunk
- a.csproj
разработчики, которые должны работать на a.csproj создаст филиал в разработчике, и они будут работать с там. Наши проекты должны иметь ссылку на файл binary1.dll в каталоге двоичных файлов.
Если ссылка является относительным путем (по умолчанию для Visual Studio), то путь не будет работать как для проекта в магистрали, так и для проекта в ветке разработчика.
Чтобы обойти эту проблему, я думал о создании переменной среды и использования, что в файле проекта вместо:
<Reference Include="binary1">
<HintPath>$(MY_ENV_VAR)\binary1.dll</HintPath>
</Reference>
Это прекрасно работает, но я хотел, чтобы помочь разработчикам добавлять ссылки легко, так что я написал программа, которая будет преобразовывать относительные пути, указывающие на binary1.dll (например, из ветви dev a.csproj это изменит путь ../../binaries/binary1.dll
до $(MY_ENV_VAR)\binary1.dll
), но я не понял, как это сделать.
Если я использую событие предварительной сборки, проект уже загружен в память, и событие возвращает ошибку, поскольку оно не может записать файл проекта.
Тогда я понял, что я мог бы переопределить цели MSBuild, и пытался с целями: BeforeCompiler
, AfterCompiler
, BeforeBuild
, AfterBuild
и во всех из них проект уже заблокирован.
Затем я столкнулся с this answer, и я модифицировал свой код для вызова исполняемого файла в цель GenerateApplicationManifest
, но этот, похоже, вообще не вызывает исполняемый файл.
Некоторые другие идеи, с которыми я играл, создают новый проект, который обновляет второй проект и имеет связь между ними, но это дублирует количество проектов.
Я мог бы просто изменить глубину ствола, но это только скрывает проблему и на самом деле ее не решает. Когда разработчики создают ветку внутри своей ветви dev для работы с различными функциями или ошибками, у меня снова возникает одна и та же проблема.
Возможно, еще одна особенность, которая исправляет это более элегантным способом, но я ничего не смог найти.
Итак, мой вопрос: как мне получить MS Build или предварительную сборку событий для изменения проекта CS?
для DLL вы просто должны установить ссылочный путь в проекте и изменить его в другую папку, чтобы автоматически использовать другую версию той же самой DLL – Franck
почему бы не скопировать DLL с вами, когда вы вступаете? – DLeh
@DLeh, потому что в конечном итоге я получаю десятки копий своих DLL и обновление библиотеки до новой версии будет означать прохождение всех файлов на сервере SCC и убедитесь, что я их все изменил. – Magus