Hi Ian!

Please, don't do this kind of tricks. It is like shooting yourself in the
foot. Functions (by definition) should be side-effect-free and nobody is
advised to do otherwise.

I was just going to propose a patch that would prevent ANY writes to
property dictionary during property evaluation, just to prevent this kind of
abuse.

BTW. I think that because version info is a complex structure, a task would
be more conventient here:

<get-assembly-version assembly="aaa.dll" propertyprefix="xxx" />

This would set the following properties:

xxx.minorversion
xxx.majorversion
xxx.buildversion
xxx.privateversion
xxx.author
...
xxx.copyright

Jarek
----- Original Message ----- 
From: "Ian MacLean" <[EMAIL PROTECTED]>
To: "Ian MacLean" <[EMAIL PROTECTED]>
Cc: "Price, Henry" <[EMAIL PROTECTED]>; "'Bob Archer'"
<[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
Sent: Friday, April 30, 2004 6:50 PM
Subject: Re: [Nant-users] get version from dll?


> actually you can set the properties from the function as well. Like:
>
> <script language="C#" prefix="script" >
>     <code><![CDATA[
>
>         [Function("get-file-version")]
>         public string GetFileVersion( string file, bool setProperties ) {
>
>         System.Diagnostics.FileVersionInfo myFileVersionInfo =
>             System.Diagnostics.FileVersionInfo.GetVersionInfo(file);
>             if ( setProperties ) {
>                 Project.Properties["dll.majorversion"] =
> myFileVersionInfo.FileMajorPart.ToString();
>                 Project.Properties["dll.minorversion"] =
> myFileVersionInfo.FileMinorPart.ToString();
>                 Project.Properties["dll.buildversion"] =
> myFileVersionInfo.FileBuildPart.ToString();
>                 Project.Properties["dll.privateversion"] =
> myFileVersionInfo.FilePrivatePart.ToString();
>             }
>             return myFileVersionInfo.FileVersion;
>
>         }
>
> ]]></code>
> </script>
>
> the advantage of a custom function over a block of script in a target is
> that you only have to define it once and can then call it for each file
> you need version info for.
>
> Ian
>
> Ian MacLean wrote:
>
> > This is nice. Better than my assembly specific version.
> >
> > Note that if you are using a current nightly you can wrap your
> > diagnostics code in a custom function definition like:
> >
> > <code><![CDATA[                  [Function("get-file-version")]
> >        public string GetFileVersion( string file ) {
> >                        System.Diagnostics.FileVersionInfo
> > myFileVersionInfo =
> >             System.Diagnostics.FileVersionInfo.GetVersionInfo(file);
> >         return myFileVersionInfo.FileVersion;
> >      }
> > ]]></code>
> > </script>
> > and then call it like:
> >
> > <property name="fileversion"
> > value="script::get-file-version('somefile.dll')" />
> >
> > of course if you need to set properties to the individual version
> > components then a custom task is a better option.
> >
> > Bob,
> > You should be able to drop the above code into your build file if all
> > you need is the file version as a string.
> >
> > Ian
> >
> >
> > Price, Henry wrote:
> >
> >> How about something like this? (off the top of my head and without
> >> intellisense :)
> >>
> >> We've done something similar here - for checking which versions of
> >> files are
> >> installed etc - had to do it all in script - I've given up on writing
> >> custom
> >> tasks, they take too long to edit when you need to change stuff :)
> >>
> >> <script language="C#">
> >>   <code><![CDATA[
> >>    public static void ScriptMain(Project project)
> >>    {
> >>      System.Diagnostics.FileVersionInfo myFileVersionInfo =
> >> System.Diagnostics.FileVersionInfo.GetVersionInfo("path to your dll");
> >>      project.Properties["dll.majorversion"] =
> >> myFileVersionInfo.FileMajorPart;
> >>      project.Properties["dll.minorversion"] =
> >> myFileVersionInfo.FileMinorPart;
> >>      project.Properties["dll.buildversion"] =
> >> myFileVersionInfo.FileBuildPart;
> >>      project.Properties["dll.privateversion"] =
> >> myFileVersionInfo.FilePrivatePart;
> >>    ]]></code>
> >>  </script>
> >>
> >> -----Original Message-----
> >> From: Bob Archer [mailto:[EMAIL PROTECTED] Sent: 30 April 2004 4:21P
> >> To: [EMAIL PROTECTED]
> >> Subject: [Nant-users] get version from dll?
> >>
> >>
> >>
> >> Hi All,
> >>
> >>
> >>
> >> I am creating a build script that deploys our last successful daily
> >> build to
> >> our QA machine.
> >>
> >>
> >> How could I get the version/build number from a dll? Any ideas? I
> >> could get
> >> the last build number from the build number file that my version task
> >> uses,
> >> however, if that build failed it will not be the one in the daily build
> >> area.
> >>
> >>
> >>
> >> Thanks,
> >>
> >> Bob
> >>
> >>
> >>
> >>
> >>
> >> "This communication is intended solely for the addressee and is
> >> confidential and not for third party unauthorised distribution."
> >>
> >>
> >>
> >>
> >
> >
>
>
> -- 
> Ian MacLean, Developer,
> ActiveState, a division of Sophos
> http://www.ActiveState.com
>
>
>
> -------------------------------------------------------
> This SF.Net email is sponsored by: Oracle 10g
> Get certified on the hottest thing ever to hit the market... Oracle 10g.
> Take an Oracle 10g class now, and we'll give you the exam FREE.
> http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click
> _______________________________________________
> Nant-users mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/nant-users
>



-------------------------------------------------------
This SF.Net email is sponsored by: Oracle 10g
Get certified on the hottest thing ever to hit the market... Oracle 10g. 
Take an Oracle 10g class now, and we'll give you the exam FREE.
http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click
_______________________________________________
Nant-users mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/nant-users

Reply via email to