2014-01-10 5 views
2

Этот MSBuild начинает быть раллийной болью. У меня есть проект, который ссылается на .dll, но BuildServer его не находит, и я получаю «Не могу решить эту ссылку. Не удалось найти сборкуMSBuild Изменить ссылочный путь в Build?

Итак, мой проект ссылается на эту .dll как на ту, что находится в d: \ common \ DllPath \ mydll.dll, а в файле проекта mycsproj.csproj говорится HintPath .. \. . \ .. \ .. \ .. \ .. \ DllPath \ mydll.dll

Итак, все работает отлично, когда я создаю его на своей рабочей станции, И если я открою его с VS2012 на Build-сервере. (На сервере пути на самом деле также D: \, но это просто совпадение.)

Но когда я пытаюсь построить его как определение сборки, он терпит неудачу. Похоже, он строит его в C: \ Builds \ 43 \ Myapp, и я думаю, когда «SearchPath» {HintPathFromItem} «Учитывался» .. \ .. \ .. \ .. \ .. \ .. \ DllPath \ mydll.dll ", но его не было". находится в журнале, он пытается найти .dll в папке c:.

Как я могу заставить его указывать ссылку на «правильный» каталог? Для меня это тот же раздел, что и сам проект.
Является ли это в определениях Build, или мне нужно что-то изменить в файле .csproj? (В .csproj это уже относительный путь, и я не хочу это менять.)

+0

«Этот MSBuild начинает болеть за раны». в моем опыте, когда это происходит, вы, вероятно, делаете это неправильно. HintPaths вроде этого просят о проблемах. Поэтому либо убедитесь, что структура каталогов на вашем сервере одинакова, либо используйте переменную property/environment, чтобы правильно настроить hintpath (например, как ответ mockinterface). – stijn

+0

Мы получили точно такую ​​же структуру в среде dev и Build. –

ответ

0

Вы можете манипулировать xml в файле csproj.

См. Первый URL-адрес ниже.

How to add a linked file to a csproj file with MSBuild. (3.5 Framework)

FTP Credentials for MSBuild.ExtensionPack.Communication.Ftp

Это лучше иметь дело последовательно между разработчиком и средой сборкой. Но большинство из них не думают об этом, пока по дороге.

Итак, Xml-Update может быть вашим другом, чтобы изменить HintPath.

+0

Thnx, я посмотрю на это. (На самом деле, мы получили точно такую ​​же структуру в среде dev и Build. Оба указывают на D..TFS..Procect .. и так далее.) –

+0

Тогда еще одно предложение - иметь «getter», чтобы вытащить файлы в относительный в сценариях сборки.В основном, файлы с понижающей загрузкой и их в соответствующем каталоге. Эти файлы ~ могут существовать в источнике-контроле, но более бедный путь - иметь дело с двоичным репозиторием, таким как nuget. – granadaCoder

0

Смотрите и нажимайте на ответ Wolf5 на этот вопрос here.

Структура каталога, скорее всего, имеет файлы проекта на один уровень ниже, чем рабочий каталог. Это, как обычно, мои проекты. Решение состоит в том, чтобы добавить дополнительный файл HintPath в файл проекта по любому пути MsBuild. Например, у меня это в моих проектах:

<Reference Include="Blah.Namespace.Path.SomeReference, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath Condition="Exists('..\..\..\..\..\Dir1\Dir2\Dir3\bin\Debug\SomeReference.dll')">..\..\..\..\..\Dir1\Dir2\Dir3\bin\Debug\SomeReference.dll</HintPath> 
    <HintPath Condition="Exists('..\..\..\..\Dir1\Dir2\Dir3\bin\Debug\SomeReference.dll')">..\..\..\..\Dir1\Dir2\Dir3\bin\Debug\SomeReference.dll</HintPath> 
    <Private>True</Private> 
</Reference> 
Смежные вопросы