我正在创建一个.net Web应用程序,并有一些构建任务,例如msbuild复制任务。我通过编辑应用程序的项目文件并添加任务来添加它。
虽然这样可以正常工作,但是有什么方法可以将外部xml文件用于项目文件,并且在我的构建任务中引用它的主项目文件?我更喜欢这个,因为我不必编辑主项目文件,项目文件和构建任务之间存在分离。
答案 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感兴趣,并提供更详细的示例。