通常,在为C#进行构建脚本时,只需包含**/*CS即可为每个项目/DLL构建。但是,我现在有一个情况,我有一些.cs文件,这些文件不是该项目的一部分,而是居住在该目录中(它们是从另一个库中出于参考目的)。 .csproj文件中没有链接,因此VS构建工作正常,但Nant构建却没有。

有人知道是否有一种很好的简便方法可以将.CS条目从相关的.csproj文件中拉出,并将其用作要构建的源文件列表,而不是使用一般通配符匹配。

提前致谢。

有帮助吗?

解决方案

您不想使用msbuild的任何特定原因 仅适用于C#构建位?这就是我为协议缓冲区端口所做的,它运行良好。它 要求 南特·科特里布(Nant-Contrib), ,但这没什么大不了的。

这样,您知道您只需要让一件事情正常工作,并且知道它将以相同的方式构建。

您可以查看我的Protobuf端口构建文件 这里, ,为了灵感。显而易见的缺点是单声道支持,但我相信Xbuild正在改善...

其他提示

南特有 支持 用于自动构建解决方案,包括 csproj 文件,使用一个 <solution> 任务。

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

NantContrib 包括一个 MSBUILD任务 - 您可以使用它来构建项目和解决方案。这是实践中的一个例子: http://web.archive.org/web/20100913051600/http://codebetter.com/blogs/jeffrey.palermo.palermo/archive/2006/08/12/12/148248.aspx

您可以通过执行任务使用MSBUILD构建项目,而不是直接调用编译器 msbuild project.csproj.

使用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>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top