代码之家  ›  专栏  ›  技术社区  ›  Mike Q

使用.csproj文件生成

  •  2
  • Mike Q  · 技术社区  · 14 年前

    通常,当为C执行构建脚本时,我只为要构建的每个项目/dll包含**/*.cs。但是,我现在有一种情况,我有一些.cs文件,它们不是项目的一部分,而是位于该目录中(它们是为了从另一个库中引用而存在的)。.csproj文件中没有链接,因此vs build工作正常,但nant build不正常。

    有人知道是否有一个很好的简单方法可以从相关的.csproj文件中提取.cs条目,并将其用作要生成的源文件列表,而不是使用通用通配符匹配。

    事先谢谢。

    5 回复  |  直到 13 年前
        1
  •  4
  •   Jon Skeet    14 年前

    不想使用msbuild的任何特定原因 仅适用于C构建位 ?这就是我为我的协议缓冲区端口所做的,它工作得很好。它 要求 nant-contrib 但这不是什么困难。

    这样你就知道你只需要让一件东西工作,并且知道它会以同样的方式被建造。

    你可以看看我的protobuf端口构建文件 here 为了灵感。明显的缺点是单声道支持,但我相信Xbuild正在改进…

        2
  •  3
  •   matt    14 年前

    Nantcontrib 包括一个 msbuild task -您可以使用它来构建项目和解决方案。下面是一个实践中的例子: http://codebetter.com/blogs/jeffrey.palermo/archive/2006/08/12/148248.aspx

        3
  •  3
  •   Matthew Flaschen    14 年前

    南特 support 用于自动构建vs解决方案,包括 csproj 文件,使用 <solution> 任务。

    最新支持的解决方案格式是vs 2003。

        4
  •  2
  •   Lee    14 年前

    您可以使用msbuild通过exec任务生成项目,而不是直接调用编译器,例如。 msbuild project.csproj .

        5
  •  1
  •   M.C.    13 年前

    使用msbuild是个好主意。但是,如果有任何孤立文件(.cs文件不在.csproj中),aspnet_compile.exe有时会失败。为了解决这个问题,我编写了以下命令来删除.csproj中不包含的所有*.cs文件。到目前为止,任何反馈都是很好的。

    <project>
     <foreach item="File" property="csprojFile">
     <in>
      <items>
       <include name="source/**/*.csproj" />
      </items>
     </in>
     <do>
      <property name="currentFolder" value="${directory::get-current-directory()}" />
      <property name="csprojParentFolder" value="${directory::get-parent-directory(csprojFile)}" />
    
      <foreach item="File" property="csFile">
       <in>
        <items>
         <include name="${csprojParentFolder}/**/*.cs"/>
        </items>
       </in>
       <do>
    
        <property name="csFileRelativePath" value="${string::replace(csFile, csprojParentFolder + '\', '')}" />
        <loadfile property="projFile" file="${csprojFile}" />
        <if test="${not string::contains(projFile, csFileRelativePath)}">
         <echo message="${csprojFile}:  | Missing: ${csFileRelativePath}" />
         <!-- <delete file="${csprojParentFolder + '\' + csFileRelativePath}" /> -->
        </if>
       </do>
      </foreach>
    
     </do>
     </foreach>
    </project>