внешний файл для задач сборки - PullRequest
2 голосов
/ 10 января 2011

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

Хотя это работает нормально, можно ли как-нибудь использовать внешний файл xml в файле проекта, чтобы мои задачи по сборке были в нем, а основной файл проекта ссылался на него? Я бы предпочел это, так как тогда мне не пришлось бы редактировать основной файл проекта, и между файлом проекта и задачами сборки было разделение.

Ответы [ 2 ]

1 голос
/ 11 января 2011

Вы можете просто сослаться на любой внешний проект или целевой файл, добавив import к вашему основному файлу проекта:

...
<!-- this is the default import for (c#) web project files -->
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" />

<!-- import your custom project/target file here -->
<Import Project="MyCustom.targets" Condition="Exists('MyCustom.targets')" />
...

Добавление Condition позволит создать ваш основной проект, даже если ваш пользовательский проект / целевой файл отсутствует, поскольку сборка выполняется в другой среде.

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


Обновление

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

В этом случае лучший способ - создать собственный проект для вызова сборки вашего веб-проекта. Это может выглядеть примерно так:

<Project DefaultTargets="MyTargetAfterBuild">
    <!-- some Project attributes omitted for readability -->

    <Target Name="MyTargetBeforeBuild" ContinueOnError="false">
        <Exec Command="svn export" />
    </Target>

    <Target Name="Build" DependsOnTargets="MyTargetBeforeBuild">
        <MSBuild Projects="MyWebProject.csproj" Targets="Build" Properties="Configuration=Release" >
        </MSBuild>
    </Target>

    <Target Name="MyTargetAfterBuild" DependsOnTargets="Build">
        <Exec Command="powershell.exe .\MyCustomScript.ps1" />
    </Target>

</Project>

Вас может заинтересовать этот ответ по похожему сценарию с более подробным примером.

1 голос
/ 10 января 2011

Вы можете вызвать msbuild.exe для отдельного файла сборки в событии до или после сборки.

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