Page 1 of 1

.NET 4.0 support | -ref:System.Numerics.dll?

PostPosted: Mon Mar 28, 2011 7:20 am
by carlosqt
Hi there,

Does Cobra targets only the .NET Framework 2.0, 3.0 and 3.5? is there any switch on the compiler command line to switch to use .NET 4.0?

When trying to reference a .dll assembly that is only available for the .NET Framework 4.0 i get the following error:

C:\Cobra\Cobra-0.8.0-post\bin>cobra test.cobra -ref:System.Numerics.dll

error: COBRA INTERNAL ERROR / BadImageFormatException / Could not load file or a
ssembly 'file:///C:\Cobra\Cobra-0.8.0-post\bin\System.Numerics.dll' or one of it
s dependencies. This assembly is built by a runtime newer than the currently loa
ded runtime and cannot be loaded.
Compilation failed - 1 error, 0 warnings
Not running due to errors above.

Thanks for the info.

Re: .NET 4.0 support | -ref:System.Numerics.dll?

PostPosted: Mon Mar 28, 2011 8:07 am
by RIGHT_THEN
Hello Carlosqt

There are plans to bring up a .net 4.o compatible CobraCompiler
but certain things can still be done to overcome this issue

1) on commmand line you can specify which C# compiler to use to compile
your code -native-compiler[:file-system-path] default is auto
or
-sharp-compiler
like -native-compiler:"C:\Windows\Microsoft.NET\Framework\csc.exe"

2) while building Cobra in your cobra-workspace\source from install-from-workspace.bat
you can tweek install-from-workspace.cobra to use -kif:yes options
whereever it is calling compiler to compile. that way you would have
cobra source as c# files. you can then compile these c# files with C#4.0
compiler. so the resultant assembly/compiler will automatically be .net4.0
compatible.
3) you can go to
http://cobrapluginsd.codeplex.com/releases/
and download
CobraAsCsharp_4. In that you would find a .net 4 compatible compiler
which is gotten by the same process mentioned above. but it is old by
a couple of releases. but you would get the idea.

4) take cobra.exe and cobra.lang.dll use ILDASM of .net 4.0 and
pass it a a command line like this
ILDASM where_Ever_Cobra.exe_IsLocated\Cobra.exe /out=where_Ever_U_Want_ILToBe_Produced\Cobra.il
you will see a Cobra.il file produced now in that file after opening it in any Editor/notepad

write
// Metadata version: v4.0.30319
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 4:0:0:0
}
.assembly extern System
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 4:0:0:0
}


instead of whatever you find instead of above written it would be
most probably v2.something and .ver 2:something

now use ILASM and pass it a command prompt line like this
ILASM pathofCobra.il\Cobra.il /EXE /out=cobra.exe
you will have a .net 4.0 compatible Cobra.exe
do the same for Cobra.Lang.dll

i just tested this way i am not sure if it would create problems in future
only problem i can think with this way is that if certain methods used
earlier which might not be in the new version might be troublesome
but you can try

Thanking_You
RIGHT_THEN

Re: .NET 4.0 support | -ref:System.Numerics.dll?

PostPosted: Mon Mar 28, 2011 9:56 am
by carlosqt
Hi RIGHT_THEN,

Perfect, thanks for the replay.
I will try those options and see how it works.

Carlos