codebude / QRCoder

A pure C# Open Source QR Code implementation
MIT License
4.66k stars 1.11k forks source link

QRCode class not found after updating from `1.4.2 to 1.6.0` #577

Open badrshs opened 2 months ago

badrshs commented 2 months ago

Type of issue

[x] Bug
[ ] Question (e.g. about handling/usage)
[ ] Request for new feature/improvement

Expected Behavior

The QRCode class should be found and usable after updating to the latest version of QRCoder 1.4.2 -> 1.6.0. The following code should compile and work as it did with previous versions:

using var qrCode = new QRCode(qrCodeData);

Current Behavior

After updating to the latest version of QRCoder, the QRCode class can no longer be found. The compiler throws an error:

Error (active) CS0246 The type or namespace name 'QRCode' could not be found (are you missing a using directive or an assembly reference?)

This is breaking existing code that was working fine with previous versions 1.4.2.

Steps to Reproduce (for bugs)

  1. Update QRCoder to the latest version
  2. Use the following code:
using System.Drawing;
using X.Core.Services;
using QRCoder;

namespace X.Services;

public class QrCodeGenerator : IQrCodeGenerator
{
    public Bitmap GenerateQrCode(string text) => GenerateQrCode(text, 10);

    private Bitmap GenerateQrCode(string text, int size)
    {
        using var qrGenerator = new QRCodeGenerator();
        QRCodeData qrCodeData = qrGenerator.CreateQrCode(text, QRCodeGenerator.ECCLevel.Q);
        using var qrCode = new QRCode(qrCodeData); // Error occurs here
        return qrCode.GetGraphic(size);
    }
}

Your Environment

Additional context:

badrshs commented 2 months ago

after some search I was able to fix this by doing

[SuppressMessage("Interoperability", "CA1416:Validate platform compatibility")]
private Bitmap GenerateQrCode(string text, int size)
{
    using var qrGenerator = new QRCodeGenerator();
    using QRCodeData qrCodeData = qrGenerator.CreateQrCode(text, QRCodeGenerator.ECCLevel.Q);
    using var qrCode = new PngByteQRCode(qrCodeData);
    byte[] qrCodeAsPngByteArr = qrCode.GetGraphic(size);

    using var ms = new MemoryStream(qrCodeAsPngByteArr);
    return new Bitmap(ms);
}