MSBuild: изменение ссылок проекта на двоичные ссылки файла - PullRequest
1 голос
/ 06 декабря 2011

У меня есть несколько проектов .net / C #, которые я создаю с помощью MSBuild.

В проекте, который я строю, есть ссылки на другие проекты C #.

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

Я уже устанавливаю "BuildProjectReferences" в False для моего шага MSBuild.

Итак, по сути, я хочу, чтобы MSBuild игнорировал ссылки на проекты и искал эти двоичные файлы в новом каталоге.

Возможно ли это сделать?Возможно ли это без необходимости динамически изменять файл проекта перед сборкой?

** Обновление 1 **

Может помочь дополнительная информация ... Я на самом деле собираю каждый двоичный файл с помощью Ant / AntDotNet / MSBuild и загружаю в Artifactory.Я в основном использую управление зависимостями Айви с двоичными файлами .Net.

Прямо сейчас у меня нормально работает загрузка и загрузка зависимостей.

Единственная часть, которую мне не хватает, это заставить MSBuild искать двоичные файлы как файловые зависимости вместо ссылок на проекты, которые есть в файле проекта.

** Обновление 2 **

Похоже, MSBuild поддерживает редактирование файла csproj с использованием XMLPoke и XMLPeek.

Так что в моем случае мне нужно изменить следующее в моем файле проекта:

<ProjectReference Include="..\MyReferencedProject\MyReferencedProject.csproj">
  <Project>{MyReferencedProjectGUID}</Project>
  <Name>MyReferencedProject</Name>
  <Private>False</Private>
</ProjectReference>

на этот

<Reference Include="MyReferencedProject">
</Reference>

Может кто-нибудь дать мне какие-либо указатели натот?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2011

В итоге я использовал Ant в сочетании с xmltask addon.

<target name="convert" description="convert project references to file references">
    <echo>Converting the following Project references :: ${Project.ItemGroup.ProjectReference.Name}</echo>
    <xmltask source="MyParentProject.csproj" dest="MyParentProject.csproj">
        <rename path="/:Project/:ItemGroup/:ProjectReference/:Name" to="BinaryName"/>
    </xmltask>
    <replace file="MyParentProject.csproj" token="&lt;BinaryName&gt;" value="&lt;Reference Include=&quot;"/>
    <replace file="MyParentProject.csproj" token="&lt;/BinaryName&gt;" value="&quot;&gt;&lt;/Reference&gt;"/>
    <xmltask source="MyParentProject.csproj" dest="MyParentProject.csproj">
        <copy path="/:Project/:ItemGroup/:ProjectReference/:Reference" buffer="refbuffer" append="true"/>
        <paste path="/:Project/:ItemGroup[1]" buffer="refbuffer"/>
        <remove path="/:Project/:ItemGroup/:ProjectReference" /> 
    </xmltask>
    <echo>Conversion complete.</echo>
</target>

В первой xmltask мы устанавливаем элемент «Имя» в «BinaryName», чтобы мы могли его найти.

Далее у нас есть две задачи Ant Replace, которые меняют что-то вроде

"<BinaryName>MyReferencedProject</BinaryName>" 

до

"<Reference Include="MyReferencedProject"></Reference>"

И в последнем xmltask наши ссылки на проекты мы преобразовали в ссылки на файлы в верхнюю ItemGroup, которая обычно имеет ссылки на файлы.

Затем мы окончательно удаляем раздел ProjectReferences.

0 голосов
/ 06 декабря 2011

Ответ на обновление2: Ваш вопрос связан / дублирует этот вопрос . Нет простого способа конвертировать его. Вы должны написать пользовательское задание MSBuild для обновления файлов проекта MSBuild перед сборкой.

...