【问题标题】:Is there a NAnt task that will display all property name / values?是否有显示所有属性名称/值的 NAnt 任务?
【发布时间】:2010-09-13 12:39:09
【问题描述】:

是否有一个 NAnt 任务会回显所有在构建过程中当前设置的属性名称和值?可能相当于 Ant echoproperties 任务的东西?

【问题讨论】:

    标签: .net ant build build-automation nant


    【解决方案1】:

    我尝试了 Brad C 建议的解决方案,但它们对我不起作用(在 x64 上使用 NAnt 0.92 运行 Windows 7 Profession)。但是,这适用于我的本地配置:

    <target name="echo-properties" verbose="false" description="Echo property values" inheritall="true">
    <script language="C#">
        <code>
        <![CDATA[
            public static void ScriptMain(Project project)
            {
            System.Collections.SortedList sortedByKey = new System.Collections.SortedList();
            foreach(DictionaryEntry de in project.Properties)
            {
                sortedByKey.Add(de.Key, de.Value);
            }
    
            NAnt.Core.Tasks.EchoTask echo = new NAnt.Core.Tasks.EchoTask();
            echo.Project = project;
    
            foreach(DictionaryEntry de in sortedByKey)
            {
                if(de.Key.ToString().StartsWith("nant."))
                {
                    continue;
                }
                echo.Message = String.Format("{0}: {1}", de.Key,de.Value);
                echo.Execute();
            }
            }
        ]]>
        </code>
    </script>
    </target>
    

    【讨论】:

      【解决方案2】:

      我想让它们排序,所以我扩展了另一个答案。它不是很有效,但很有效:

      <script language="C#" prefix="util" >
          <references>
              <include name="System.dll" />
          </references>       
          <imports>
              <import namespace="System.Collections.Generic" />
          </imports>      
          <code>
              <![CDATA[
              public static void ScriptMain(Project project) 
              {
                  SortedDictionary<string, string> sorted = new SortedDictionary<string, string>();
                  foreach (DictionaryEntry entry in project.Properties){
                      sorted.Add((string)entry.Key, (string)entry.Value);
                  }
                  foreach (KeyValuePair<string, string> entry in sorted)
                  {
                      project.Log(Level.Info, "{0}={1}", entry.Key, entry.Value);
                  }
              }
              ]]>
          </code>
      </script>
      

      【讨论】:

        【解决方案3】:

        试试这个 sn-p:

        <project>
            <property name="foo" value="bar"/>
            <property name="fiz" value="buz"/>
        
            <script language="C#" prefix="util" >
                <code>
                    <![CDATA[
                    public static void ScriptMain(Project project) 
                    {
                        foreach (DictionaryEntry entry in project.Properties)
                        {
                            Console.WriteLine("{0}={1}", entry.Key, entry.Value);
                        }
                    }
                    ]]>
                </code>
            </script>
        </project>
        

        你可以保存并使用 nant 运行。

        不,目前还没有任务或功能可以为您执行此操作。

        【讨论】:

        • 十年后仍在帮助!
        【解决方案4】:

        你无法证明是否定的,但我找不到也没有见过。我传统上会推出自己的属性回声。

        【讨论】:

          猜你喜欢
          • 2011-04-04
          • 2012-04-18
          • 1970-01-01
          • 1970-01-01
          • 2021-03-24
          • 2015-03-31
          • 1970-01-01
          • 2011-07-11
          • 2016-09-18
          相关资源
          最近更新 更多