IO.FileNotFoundException in MySql.Data.dll: Can't load System.Security.Permissions - c#

I am using Visual Studio Code, and I'm trying to connect to my MySql server (5.5). I have downloaded the latest (6.10.6) MySql connector and installed it. I had to research to add references in VS Code, but I managed it. Now my .csproj file looks like this:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Reference Include="Lib\MySql.Data.dll">
<HintPath>MySql.Data</HintPath>
<SpecificVersion>False</SpecificVersion>
</Reference>
</ItemGroup>
</Project>
I have copied the content of C:\Program Files (x86)\MySQL\MySQL Connector Net 6.10.6\Assemblies\v4.5.2 to myProject\Lib. At compile time there are no errors, all green. But when I try to connect using this code
using System.Data;
using System.Security.Permissions;
using MySql.Data;
using MySql.Data.MySqlClient;
public static bool Connect(){
string str = "server=192.168.0.160;user=usr;database=DB;port=3306;password=pass";
MySqlConnection connection = new MySqlConnection(str);
connection.Open();
System.Console.WriteLine(connection.State);
return true;
}
it fails, and produces this error:
An unhandled exception of type 'System.IO.FileNotFoundException' occurred in MySql.Data.dll: 'Could not load file or assembly 'System.Security.Permissions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The system can't find the file.'
I do not know why, as the using directive is not signaling an error.

The assembly System.Security.Permissions is currently not available for .NET core applications so my guess is you are using an older version of MySQL Database Provider that is not compatible with .NET core 2.
According the official documentation .NET core 2.0 is only supported from version 6.10.
Try installing the latest version from: https://dev.mysql.com/downloads/connector/net/6.10.html
Edit
If you already have that version and it is still not working, might be that you are missing some references. Why don't you try using the official NuGet instead of referencing the dll in the GAC, here is the command:
Install-Package MySql.Data -Version 6.10.6
If you are using VS Code, you can use the NuGet package manager extension to manage the packages directly from the editor: https://marketplace.visualstudio.com/items?itemName=jmrog.vscode-nuget-package-manager
Edit 2
Seems it might be a bug as I found this question .NET Core 2 with MySql.Data results in permission error and the accepted answer recommends updating to version 8.
So try to update to version 8.0.10-rc and let the problem be gone, here is the NuGet command:
Install-Package MySql.Data -Version 8.0.10-rc

Can't just upgrade the MySQL connector because there may be compatibility issues between newer connectors and legacy databases.

Related

Visual Studio .NET Framework 4.8 - Could not load file or assembly 'Azure.Core, Version=1.20.0.0,

We have a Microsoft Azure Function App in .NET Framework 4.8.
We want to retrieve via Managed Identity a document out of our blob.
We're trying the use the following code:
BlobContainerClient containerClient = new BlobContainerClient(new Uri(containerEndpoint), new DefaultAzureCredential());
BlobClient blobClient = containerClient.GetBlobClient(mapName);
var bytes = blobClient.DownloadContent().Value.Content.ToArray();
To make this work we're using nuGet packages:
Azure.Identity (latest version: 1.5.0)
Azure.Storage.Blobs (latest version: 12.11.0) => This needs to work with Azure.Core 1.22.0
Whenever we try to POST a message to our function, we directly receive an error:
Could not load file or assembly 'Azure.Core, Version=1.20.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8' or one of its dependencies. The system cannot find the file specified.
Adding Azure.Core package version 1.22.0 or 1.20.0 direclty into the project is not helping.
It works if we either use Azure.Identity or Azure.Storage.Blobs, but not when using both.
In the project.assets.json file, we can see a dependency to version Azure.Core 1.20:
"Azure.Identity/1.5.0": {
"type": "package",
"dependencies": {
"Azure.Core": "1.20.0",
"Microsoft.Identity.Client": "4.30.1",
"Microsoft.Identity.Client.Extensions.Msal": "2.18.4",
"System.Memory": "4.5.4",
"System.Security.Cryptography.ProtectedData": "4.5.0",
"System.Text.Json": "4.6.0",
"System.Threading.Tasks.Extensions": "4.5.4"
},
Is there any way how we can reference in our Function App to use version 1.22.0 of the Azure.Core package?
I have solved this previously by modifying the .csproj like below when i get the error Could not load file or assembly 'Azure.Core, Version=1.20.0.0
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net48</TargetFrameworks>
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>signingkey.snk</AssemblyOriginatorKeyFile>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

MySQL .NET connector throwing "System.IO.FileNotFoundException: 'Could not load file or assembly 'System.Security.Permissions" [duplicate]

I am using Visual Studio Code, and I'm trying to connect to my MySql server (5.5). I have downloaded the latest (6.10.6) MySql connector and installed it. I had to research to add references in VS Code, but I managed it. Now my .csproj file looks like this:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Reference Include="Lib\MySql.Data.dll">
<HintPath>MySql.Data</HintPath>
<SpecificVersion>False</SpecificVersion>
</Reference>
</ItemGroup>
</Project>
I have copied the content of C:\Program Files (x86)\MySQL\MySQL Connector Net 6.10.6\Assemblies\v4.5.2 to myProject\Lib. At compile time there are no errors, all green. But when I try to connect using this code
using System.Data;
using System.Security.Permissions;
using MySql.Data;
using MySql.Data.MySqlClient;
public static bool Connect(){
string str = "server=192.168.0.160;user=usr;database=DB;port=3306;password=pass";
MySqlConnection connection = new MySqlConnection(str);
connection.Open();
System.Console.WriteLine(connection.State);
return true;
}
it fails, and produces this error:
An unhandled exception of type 'System.IO.FileNotFoundException' occurred in MySql.Data.dll: 'Could not load file or assembly 'System.Security.Permissions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The system can't find the file.'
I do not know why, as the using directive is not signaling an error.
The assembly System.Security.Permissions is currently not available for .NET core applications so my guess is you are using an older version of MySQL Database Provider that is not compatible with .NET core 2.
According the official documentation .NET core 2.0 is only supported from version 6.10.
Try installing the latest version from: https://dev.mysql.com/downloads/connector/net/6.10.html
Edit
If you already have that version and it is still not working, might be that you are missing some references. Why don't you try using the official NuGet instead of referencing the dll in the GAC, here is the command:
Install-Package MySql.Data -Version 6.10.6
If you are using VS Code, you can use the NuGet package manager extension to manage the packages directly from the editor: https://marketplace.visualstudio.com/items?itemName=jmrog.vscode-nuget-package-manager
Edit 2
Seems it might be a bug as I found this question .NET Core 2 with MySql.Data results in permission error and the accepted answer recommends updating to version 8.
So try to update to version 8.0.10-rc and let the problem be gone, here is the NuGet command:
Install-Package MySql.Data -Version 8.0.10-rc
Can't just upgrade the MySQL connector because there may be compatibility issues between newer connectors and legacy databases.

The type or namespace name 'System' could not be found (are you missing a using directive or an assembly reference?) in .netcore 3.0 on Linux

I just created a simple "Hello World" console app to start testing .netcore 3.0 development on Linux using VS Code, and it won't compile with (currently) 26 errors, mostly stating that predefined types System.Object, System.String, System.Void etc are not defined or imported.
The .csproj file:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Project Include="Program.cs"/>
</ItemGroup>
</Project>
The Program.Main
using System;
namespace TestNetCore3
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
What's interesting is I have the same problem with a classlib I've been working on, which compiles and runs (the tests) fine when on a Windows 10 machine, yet when I load the repo on my Linux machine it all falls apart at the seams.
Nice idea will be to check if you have instaled specified SDK, in this case for .NET 3.0.
You can do this by typing:
dotnet --list-sdks
for all installed SDK versions, or like it was pointed in comment by TiGreX by using :
dotnet --info
Also keep in mind, that for 3.0 Visual Studio Code require newest C# extension, so please check if you have it.
Turns out I had both 3.0.100 and 2.2.402 SDKs installed, which was causing a conflict. Uninstalling 2.2.402 did the trick
sudo rm -rf /usr/share/dotnet/sdk/2.2.402

ConfigurationManager in a .NET Core application

I get the following error upon application debug/launch:
System.TypeInitializationException: 'The type initializer for 'System.Data.Entity.Internal.AppConfig' threw an exception.'
FileNotFoundException: Could not load file or assembly
'System.Configuration.ConfigurationManager, Version=4.0.2.0,
Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The system cannot
find the file specified.
With the following piece of code that uses DatabaeContext:
private CamelotViewsStandardContext db = new CamelotViewsStandardContext();
The project is on the .NET Core 3.0 with System.Configuration.ConfigurationManager NuGet package installed. It works on the previous version which is on the .NET Core 2.2 so no idea why it is not working on 3.0?
The code behind the reference for creating the database context is using Entity Framework, which is supposed to be supported in 3.0?
This happened to me when I upgraded a project from .NET Core 2.2 to 3.1. Unit tests would pass but the exception would be thrown when the webapp was deployed. I resolved it by adding
<PackageReference Include="System.Configuration.ConfigurationManager" Version="4.7.0" />
<PackageReference Include="System.Management" Version="4.7.0" />
to the .csproj file for the project.
Reference: https://github.com/dotnet/runtime/issues/627
install this package in both project
Install-Package System.Configuration.ConfigurationManager -Version 4.7.0

Tests for Azure Table Storage using Microsoft.Azure.Storage.Common 9.4.0.2-preview

I created a .NET Standard 2.0 class library where I use Azure table storage as it's described here - https://learn.microsoft.com/en-us/azure/cosmos-db/table-storage-how-to-use-dotnet. Also, I created a .NET Core test project to test my client library. And when I run a simple test I get this:
System.IO.FileNotFoundException : Could not load file or assembly 'Microsoft.Azure.Documents.Client, Version=1.22.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. The system cannot find the file specified.
I tried many things to make it work but this is just waste of time. How do I fix this?
Microsoft.Azure.Documents.Client package is now obselete. Please use Microsoft.Azure.DocumentDB package instead.
Refer here
Nuget Console:
Install-Package Microsoft.Azure.DocumentDB.Core -Version 1.9.1
(Or)
Install-Package Microsoft.Azure.DocumentDB -Version 2.0.0-preview2
See more about this System.IO.FileNotFoundException : Could not load file or assembly error

Categories

Resources