使用MSBuild从网站构建中排除文件夹

时间:2009-08-19 21:35:57

标签: msbuild

我们使用MSBuild通过CruiseControl构建我们的解决方案。我们有几个程序集和一个网站作为解决方案的一部分。通过VS2008构建,构建成功。但是在构建框中,我们收到以下错误。

ASPNETCOMPILER (,):

        errorASPCONFIG: The CodeDom provider type "Microsoft.VJSharp.VJSharpCodeProvider, VJSharpCodeProvider, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" could not be located.

原因是在网站的scripts文件夹中我们有几个扩展名为.java的文件。我们不希望构建这些文件。实际上我们在构建的脚本文件夹中不需要任何东西。

有没有办法在网站项目中排除文件夹或扩展程序?或者告诉MSBuild遵循VS2008用来决定编译什么的相同规则?

3 个答案:

答案 0 :(得分:1)

您可以使用Web Deployment Projects。在WDP中,您可以使用ExcludeFromBuild项来排除这些文件。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/aa479568.aspx

答案 1 :(得分:1)

您可以使用Item元素的移除属性(brief introduction on MSDN)删除整个文件夹。

例如,如果您的项目定义如下:

<ItemGroup>
    ...
    <Compile Include="Tests\Test1.cs" />
    <Compile Include="Tests\SubTests\SubTest1.cs" />
    ...
</ItemGroup>

并且您想要从“Tests”文件夹中排除所有类,您可以在项目结束时定义任务:

    ...
    <PropertyGroup>
        <CoreCompileDependsOn>$(CoreCompileDependsOn);ExcludeTestsFolder</CoreCompileDependsOn>
    </PropertyGroup>
    <Target Name="ExcludeTestsFolder">
        <ItemGroup>
            <Compile Remove="Tests\**\*.cs" />
        </ItemGroup>
    </Target>
</Project>

在外部文件中定义此类任务并使用Import元素(thorough explanation in another thread)导入它也是一个好主意。

答案 2 :(得分:0)

构建文件内部将是具有相关项目的项目组。只需编辑该文件即可排除该项目。

example

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <Res Include = "Strings.fr.resources" >
            <Culture>fr</Culture>
        </Res>
        <Res Include = "Dialogs.fr.resources" >
            <Culture>fr</Culture>
        </Res>

        <CodeFiles Include="**\*.cs" Exclude="**\generated\*.cs" />
        <CodeFiles Include="..\..\Resources\Constants.cs" />
    </ItemGroup>
...
</Project>

编辑:更正以回答评论。

如果您只有一个sln文件,是否可以创建将文件移开的元msbuild脚本,调用任务来构建解决方案,然后将它们放回去?