【问题标题】:external file for build tasks构建任务的外部文件
【发布时间】:2011-01-10 18:25:36
【问题描述】:

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

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

【问题讨论】:

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


【解决方案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 感兴趣,并提供更详细的示例。

【讨论】:

  • 感谢您的帮助。我可以创建一个与项目文件设置类似的外部 xml 文件吗? 等。从这里我可以参考我的构建任务,提供参数等。
  • @Niall:是的,您可以使用 MSBuild(或扩展)提供的任何 TargetTask 创建一个外部 xml 文件......但听起来你更喜欢这样的东西用不同的方法更好地工作。有关详细信息,请参阅我的更新答案。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2012-07-09
    • 2020-04-28
    • 2010-10-04
    相关资源
    最近更新 更多