用于构建任务的外部文件

时间:2011-01-10 18:25:37

标签: c# visual-studio msbuild msbuild-task

我正在创建一个.net Web应用程序,并有一些构建任务,例如msbuild复制任务。我通过编辑应用程序的项目文件并添加任务来添加它。

虽然这样可以正常工作,但是有什么方法可以将外部xml文件用于项目文件,并且在我的构建任务中引用它的主项目文件?我更喜欢这个,因为我不必编辑主项目文件,项目文件和构建任务之间存在分离。

2 个答案:

答案 0 :(得分:1)

您可以在预构建或构建后事件中调用msbuild.exe,定位单独的构建文件。

答案 1 :(得分:1)

您可以通过向主项目文件添加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目标,但是可以构建相同的主项目文件,而不会在我的暂存环境中进行任何更改。


<强>更新

您的评论表明您实际上正在寻找一种应该反过来的解决方案:您希望在构建项目之前和之后执行一些步骤而不修改项目配置本身。

在这种情况下,最好的方法是创建自定义项目以调用Web项目的构建。这看起来像这样:

<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>

您可能会对this answer on a similar scenario感兴趣,并提供更详细的示例。