C# 生成任务的外部文件

C# 生成任务的外部文件,c#,visual-studio,msbuild,msbuild-task,C#,Visual Studio,Msbuild,Msbuild Task,我正在创建一个.net web应用程序,并有一些生成任务,例如msbuild copy任务。我通过编辑应用程序的项目文件并添加任务来添加它 虽然这可以正常工作,但是否有任何方法可以将外部xml文件用于项目文件,并让主项目文件引用我的构建任务?我更愿意这样做,因为这样我就不必编辑主项目文件,而且项目文件和生成任务之间是分离的。您可以调用msbuild.exe,以单独的生成文件为目标,在预生成或后生成事件中。您可以通过向主项目文件添加import来引用任何外部项目或目标文件: ... <!--

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


虽然这可以正常工作,但是否有任何方法可以将外部xml文件用于项目文件,并让主项目文件引用我的构建任务?我更愿意这样做,因为这样我就不必编辑主项目文件,而且项目文件和生成任务之间是分离的。

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

您可以通过向主项目文件添加
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')" />
...

您可能对更详细的示例感兴趣。

感谢您在这方面的帮助。我可以创建一个外部xml文件,其设置与项目文件ie等类似。从这里我可以引用我的生成任务、提供参数等@Niall:是的,您可以创建一个外部xml文件,其中包含MSBuild(或扩展名)提供的任何
目标
任务
。。。但听起来你更追求的是另一种方法更有效的东西。有关详细信息,请参阅我的更新答案。
<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>