'Changing the version information of ironpython .dll assembly

I compiled a .dll file in ironpython, by using the following code:

import clr

clr.CompileModules('C:/example.dll', 'C:/example.py')

It essentially compiles the .py file to .dll. The only problem with this is that it creates a file with no information about the Company, Language, File Version etc. In fact the File Version is always: 0.0.0.0.

I was wondering if there is a way to at least alter the File Version (change it to something other than 0.0.0.0). I googled and found a similar topic in here on stackoverflow. I tried three methods:

1) One with Visual Studio (File->Open-> find .dll, Edit->Add Resource->Version click New. In the new Version tab, change FILEVERSION and PRODUCTVERSION)

2) Another one by using the Change version 2012 application

3) And third one by using: Simple Version Resource Tool for Windows 1.0.10

None of them worked. For some reason looks like the structure of the .dll assembly created with ironpython is different than the .NET one created with VB or C#.

Does anyone know how to change the File Version from 0.0.0.0 to something else?

Thank you.



Solution 1:[1]

You can use the pyc.py file packaged into IronPython to compile your file into a .dll file. The file is located in the directory IronPython 2.7\Tools\Scripts.

If we open pyc.py for editing, you'll see the different things it can do.

pyc: The Command-Line Python Compiler

Usage: ipy.exe pyc.py [options] file [file ...]

Options:
/out:output_file                          Output file name (default is main_file.<extenstion>)
    /target:dll                               Compile only into dll.  Default
    /target:exe                               Generate console executable stub for startup in addition to dll.
    /target:winexe                            Generate windows executable stub for startup in addition to dll.
    @<file>                                   Specifies a response file to be parsed for input files and command line options (one per line)
    /file_version:<version>                   Set the file/assembly version
    /? /h                                     This message    

EXE/WinEXE specific options:
    /main:main_file.py                        Main file of the project (module to be executed first)
    /platform:x86                             Compile for x86 only
    /platform:x64                             Compile for x64 only
    /embed                                    Embeds the generated DLL as a resource into the executable which is loaded at runtime
    /standalone                               Embeds the IronPython assemblies into the stub executable.
    /mta                                      Set MTAThreadAttribute on Main instead of STAThreadAttribute, only valid for /target:winexe
    /file_info_product:<name>                 Set product name in executable meta information
    /file_info_product_version:<version>      Set product version in executable meta information
    /file_info_company:<name>                 Set company name in executable meta information
    /file_info_copyright:<info>               Set copyright information in executable meta information
    /file_info_trademark:<info>               Set trademark information in executable meta information

Example:
    ipy.exe pyc.py /main:Program.py Form.py /target:winexe

One thing that I personally like to do is move pyc.py from the Scripts folder to the IronPython folder along with my python file as well.

Assuming you also do this, you would open command prompt as administrator and navigate to the IronPython folder.

cd "Program Files (x86)\IronPython 2.7"

Then you would want to compile your python file as a .dll and set the file version using pyc.py. To do that, you're going to want to type in:

ipy.exe pyc.py /main:example.py /target:dll /file_version:0.0.0.1

If you want to add a company name, and other items as well, you simply have to pass those option to the pyc.py script.

ipy.exe pyc.py /main:Program.py Form.py /target:winexe /file_info_company:Company

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 David