Eric, The <setenv> task has since become part of NAnt Core (thx to Ian), so you no longer need to define that custom task:
http://nant.sourceforge.net/nightly/latest/help/tasks/setenv.html Gert > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of > Eric Deslauriers > Sent: dinsdag 8 februari 2005 4:18 > To: Merrill Cornish; nant-users@lists.sourceforge.net > Subject: RE: [Nant-users] NAnt vs. Batch files > > Merrill, > > > * Is there a better way in NAnt to getting the environment > variables > set > > for each <exec>? > > Aha, finally I get to give back! > > If he's using 0.85, please see the below, the sum of a discussion Ian > MacLean and I had a while ago on this list (BTW, this is > still possible > in 0.84, just uglier)... Ian's the mastermind behind the streamlined > code below. > > <!-- This snippet only works for NAnt 0.85 (assume and up) --> > <script language="C#" > > <imports> > <import namespace="System.Runtime.InteropServices"/> > </imports> > <code><![CDATA[ > [DllImport("kernel32.dll", SetLastError=true)] > static extern bool > SetEnvironmentVariable(string lpName, > string lpValue); > > [TaskName("setenv")] > public class SetEnvTask : Task { > > private string _name; > private string _value; > > [TaskAttribute("name", Required=true)] > public string EnvName { > get { return _name; } > set { _name = value; } > } > [TaskAttribute("value", Required=true)] > public string EnvValue { > get { return _value; } > set { _value = value; } > } > > protected override void ExecuteTask() { > Log(Level.Info, "Setting env var {0} to {1}", > EnvName, EnvValue ); > if ( ! SetEnvironmentVariable(EnvName, > EnvValue) ) { > throw new BuildException(string.Format("Error > setting env var {0} to {1}", EnvName, EnvValue ) , Location); > } > } > } > ]]></code> > </script> > > <!-- echo current value if it exists --> > <if test="${environment::variable-exists('X')}" > > <echo message="X = ${environment::get-variable('X')}" /> > </if> > > <echo message="Setting new value"/> > <setenv name="X" value="test"/> > <echo message="X = ${environment::get-variable('X')}" /> > > -------------------------------------------------------------- > ---------- > -------------------------------------------------------------- > ---------- > ---------------- > This way you don't have to call a specific target - just use > the custom > <setenv> task. And its simple to set variables between calls to other > tasks. > > The above generates the following output: > Target(s) specified: build > > [script] Scanning assembly "00f_4pst" for extensions. > [echo] Setting new value > [setenv] Setting env var X to test > [echo] X = test > > build: > > > This is probably somthing worth considering adding to NAnt. > Of course we > would need to use platform #ifdefs as the above is windows specific. > > Ian > > > > One tip: if someone is using > <echo message="X = ${sys.env.x}"/> > instead of > <echo message="X = ${environment::get-variable('x')}" /> > > they'll need to refresh sys.env after changing (or prior to checking) > values: > <sysinfo verbose="true"/> > <echo message="X = ${sys.env.x}"/> > > > > ------------------------------------------------------- > SF email is sponsored by - The IT Product Guide > Read honest & candid reviews on hundreds of IT Products from > real users. > Discover which products truly live up to the hype. Start reading now. > http://ads.osdn.com/?ad_ide95&alloc_id396&op=ick > _______________________________________________ > Nant-users mailing list > Nant-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/nant-users > > ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_ide95&alloc_id396&op=click _______________________________________________ Nant-users mailing list Nant-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/nant-users