Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Okt 2012

C# PostgreSQL

Hej!
Jag håller på att lära mig lite mer inom programmering och tänkte att det vore bra att kunna använda databaser. Därav satte jag upp en PostgreSQL-server som nu är uppe och fungerar. Jag använde mig av denna tutorial för att komma på benen lite, men när jag kör programmet jag skrivit får jag följande error:

"An unhandled exception of type 'System.IO.FileNotFoundException' occurred in Npgsql.dll
Additional information: Could not load file or assembly 'Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756' or one of its dependencies. The system cannot find the file specified."

Programmet ser ut som följande:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Npgsql; namespace postgresql_test { class Program { static void Main(string[] args) { string connectString = "Server=192.168.1.6;Port=5432;User Id=testuser;Password=testuser;Database=testdb0"; NpgsqlConnection connection = new NpgsqlConnection(connectString); connection.Open(); NpgsqlCommand testCommand = new NpgsqlCommand("insert into test values(1, 'test')", connection); testCommand.ExecuteNonQuery(); connection.Close(); } } }

Vad är det som är fel och hur löser jag detta?

Edit: Länkade fel tutorial vilket jag fixat nu med en korrekt länk.

Tack för hjälpen i förväg!

Mvh
Hugo

Fractal Design Define R5 | Custom vattenkylning | Intel Core I5 3570K @ 4.4GHz | ASUS Sabertooth Z77 | Sapphire R9 Fury | 24 GB 1600MHz | Corsair RM 750x | Samsung 830 128 GB | Crucial BX100 500GB |

| Egenbyggd DAC: MINI4396, moddad | --> | Fostex TH-X00 |

Trädvy Permalänk
Medlem
Plats
Skellefteå
Registrerad
Okt 2008

Som du ser är problemet att assemblyn Mono.Security inte hittas, och Npgsql.dll har tydligen ett beroende av Mono.

Vet inte om du sitter i Windows, men om du gör det antar jag att du behöver installera Mono för Windows (eller åtminstone gräva rätt på den Mono-dll du behöver och t.ex. lägga den i samma mapp som Npgsql.dll så den kan hittas):

http://www.mono-project.com/docs/getting-started/install/wind...

1800X, 1080 SLI, 4K

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Okt 2012
Skrivet av backfeed:

Som du ser är problemet att assemblyn Mono.Security inte hittas, och Npgsql.dll har tydligen ett beroende av Mono.

Vet inte om du sitter i Windows, men om du gör det antar jag att du behöver installera Mono för Windows (eller åtminstone gräva rätt på den Mono-dll du behöver och t.ex. lägga den i samma mapp som Npgsql.dll så den kan hittas):

http://www.mono-project.com/docs/getting-started/install/wind...

Nu har jag installerat Mono och testat att göra ett "Hello-World"-program och kompilerat och kört det i Mono-konsollen. Så långt fungerar. Jag har sedan kopierat "mono-2.0.dll" till samma mapp som "npgsl.dll" ligger i, men det gör ingen skillnad. Jag testade att göra en referens till "mono-2.0.dll", men jag fick ett felmedelande:
"Too many root sets" och sedan "A reference to "D:\Documents\Visual Studio 2015\DLL\mono-2.0.dll" could not be added. Please make sure that the file is accesible, and that it is a valid assembly or COM component.".

Mvh
Hugo

Fractal Design Define R5 | Custom vattenkylning | Intel Core I5 3570K @ 4.4GHz | ASUS Sabertooth Z77 | Sapphire R9 Fury | 24 GB 1600MHz | Corsair RM 750x | Samsung 830 128 GB | Crucial BX100 500GB |

| Egenbyggd DAC: MINI4396, moddad | --> | Fostex TH-X00 |

Trädvy Permalänk
Medlem
Plats
Skellefteå
Registrerad
Okt 2008

Ok. Tyvärr har jag ingen aning om vad Npgsql.dll ens är (annat än att jag antar att pg står för "postgres") och Mono har jag enbart kört under Linux för flera år sedan, så jag har ingen mer hjälp att ge. Men jag förslår att du kollar dokumentation/systemkrav för Npgsql.

Sen var jag lite otydlig med var du bör lägga den Mono-dll som behövs (är det en separat för Mono.Security kanske?). Om den är registrerad i Windows GAC så behöver du inte kopiera den någonstans utan runtimen kommer hitta den på egen hand. Om inte, så måste rätt fil (eller filer, om det finns fler beroenden) placeras någonstans där runtimen kan hitta den, exempelvis i samma mapp som din kompilerade exe-fil hamnar i. Kör du Visual Studio kan du t.ex. lägga till en referens till Mono.Security, det borde lösa problemet.

Men som sagt, ned på detaljnivå i just ditt specifika fall vet jag inget, jag gissar bara.

Värt att notera är att Mono är ett alternativ till Microsoft.NET - det är en komplett runtime med allt som behövs (ok, Mono implementerar inte 100% av .NET men en hel del). Antingen kör man det ena eller det andra. I just ditt fall så har Npgsql.dll uppenbarligen ett beroende av minst ett Mono-bibliotek, så du måste som minst gräva rätt på den eller de Mono-dll:er som krävs och referera in dem.

Här har du för övrigt något som verkar relevant i ditt fall:

https://github.com/npgsql/npgsql/issues/1018

1800X, 1080 SLI, 4K

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Okt 2012
Skrivet av backfeed:

Ok. Tyvärr har jag ingen aning om vad Npgsql.dll ens är (annat än att jag antar att pg står för "postgres") och Mono har jag enbart kört under Linux för flera år sedan, så jag har ingen mer hjälp att ge. Men jag förslår att du kollar dokumentation/systemkrav för Npgsql.

Sen var jag lite otydlig med var du bör lägga den Mono-dll som behövs (är det en separat för Mono.Security kanske?). Om den är registrerad i Windows GAC så behöver du inte kopiera den någonstans utan runtimen kommer hitta den på egen hand. Om inte, så måste rätt fil (eller filer, om det finns fler beroenden) placeras någonstans där runtimen kan hitta den, exempelvis i samma mapp som din kompilerade exe-fil hamnar i. Kör du Visual Studio kan du t.ex. lägga till en referens till Mono.Security, det borde lösa problemet.

Men som sagt, ned på detaljnivå i just ditt specifika fall vet jag inget, jag gissar bara.

Värt att notera är att Mono är ett alternativ till Microsoft.NET - det är en komplett runtime med allt som behövs (ok, Mono implementerar inte 100% av .NET men en hel del). Antingen kör man det ena eller det andra. I just ditt fall så har Npgsql.dll uppenbarligen ett beroende av minst ett Mono-bibliotek, så du måste som minst gräva rätt på den eller de Mono-dll:er som krävs och referera in dem.

Här har du för övrigt något som verkar relevant i ditt fall:

https://github.com/npgsql/npgsql/issues/1018

Tack så mycket för ditt svar!
Jag skall ta och titta på det imorgon så får vi se hur det går. Tråden du länkade verkade ju ha mer eller mindre precis att göra med det jag håller på med!
Jag återkommer med vidare resultat och tackar för hjälpen hittills!

Mvh
Hugo

Fractal Design Define R5 | Custom vattenkylning | Intel Core I5 3570K @ 4.4GHz | ASUS Sabertooth Z77 | Sapphire R9 Fury | 24 GB 1600MHz | Corsair RM 750x | Samsung 830 128 GB | Crucial BX100 500GB |

| Egenbyggd DAC: MINI4396, moddad | --> | Fostex TH-X00 |

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Okt 2012
Skrivet av backfeed:

Ok. Tyvärr har jag ingen aning om vad Npgsql.dll ens är (annat än att jag antar att pg står för "postgres") och Mono har jag enbart kört under Linux för flera år sedan, så jag har ingen mer hjälp att ge. Men jag förslår att du kollar dokumentation/systemkrav för Npgsql.

Sen var jag lite otydlig med var du bör lägga den Mono-dll som behövs (är det en separat för Mono.Security kanske?). Om den är registrerad i Windows GAC så behöver du inte kopiera den någonstans utan runtimen kommer hitta den på egen hand. Om inte, så måste rätt fil (eller filer, om det finns fler beroenden) placeras någonstans där runtimen kan hitta den, exempelvis i samma mapp som din kompilerade exe-fil hamnar i. Kör du Visual Studio kan du t.ex. lägga till en referens till Mono.Security, det borde lösa problemet.

Men som sagt, ned på detaljnivå i just ditt specifika fall vet jag inget, jag gissar bara.

Värt att notera är att Mono är ett alternativ till Microsoft.NET - det är en komplett runtime med allt som behövs (ok, Mono implementerar inte 100% av .NET men en hel del). Antingen kör man det ena eller det andra. I just ditt fall så har Npgsql.dll uppenbarligen ett beroende av minst ett Mono-bibliotek, så du måste som minst gräva rätt på den eller de Mono-dll:er som krävs och referera in dem.

Här har du för övrigt något som verkar relevant i ditt fall:

https://github.com/npgsql/npgsql/issues/1018

Goda nyheter!
Jag lyckades lösa problemet genom att installera Npgsql genom NuGet package manager i Visual Studio!
Med andra ord tolkar jag det som att jag tidigare inte lyckades installera Npgsql på ett korrekt sätt och därmed var det inte så konstigt att kompilatorn skrek om att det saknades referenser.
I Visual Studio klickade jag på Tools --> NuGet Package Manager --> Package Manager Console. I konsolen skrev jag sedan:

Install-Package Npgsql -Version 3.0.5

Detta gav ett error så jag googlade runt lite på det. Det visade sig att jag inte hade valt ett "Default Project". Detta gjorde jag genom att öppna projektet i Visual Studio. Sedan öppnade jag NuGet-consolen igen och körde koden som nu fungerade!

Tack så mycet för hjälpen @backfeed !

Mvh
Hugo

Fractal Design Define R5 | Custom vattenkylning | Intel Core I5 3570K @ 4.4GHz | ASUS Sabertooth Z77 | Sapphire R9 Fury | 24 GB 1600MHz | Corsair RM 750x | Samsung 830 128 GB | Crucial BX100 500GB |

| Egenbyggd DAC: MINI4396, moddad | --> | Fostex TH-X00 |

Trädvy Permalänk
Medlem
Plats
Skellefteå
Registrerad
Okt 2008

Fint att det löste sig!

1800X, 1080 SLI, 4K