【问题标题】:Exclude folder from website build using MSBuild使用 MSBuild 从网站构建中排除文件夹
【发布时间】:2009-08-19 21:35:57
【问题描述】:

我们使用 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.

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

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

【问题讨论】:

    标签: msbuild


    【解决方案1】:

    您可以为此使用Web Deployment Projects。在 WDP 中,您可以使用 ExcludeFromBuild 项来排除这些文件。欲了解更多信息,请参阅http://msdn.microsoft.com/en-us/library/aa479568.aspx

    【讨论】:

      【解决方案2】:

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

      例如,如果您有这样定义的项目:

      <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) 将其导入也是一个好主意。

      【讨论】:

        【解决方案3】:

        在构建文件中会有一个包含相关项目的项目组。只需编辑文件以排除该项目。

        对于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 脚本,将文件移开,调用任务来构建您的解决方案,然后将它们放回原处?

        【讨论】:

        • 我认为这不适用于网站项目,因为没有项目文件。我在 sln 文件中查看了没有运气的方法。
        • 正因如此,我不喜欢网站项目,更喜欢网络应用。你可以为你的 CI 构建创建一个 msbuild 文件吗?
        猜你喜欢
        • 2011-09-15
        • 2015-11-07
        • 2014-10-05
        • 2014-07-23
        • 1970-01-01
        • 2017-12-28
        • 2017-07-13
        • 2016-07-06
        相关资源
        最近更新 更多