Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (seongtaejeong at gmail.com)
홈페이지
첨부 파일
 

.NET 8 이상만 지원하는 Microsoft.Data.SqlClient 6.1.0 버전

얼마전 nuget에 Microsoft.Data.SqlClient 6.1.0 버전이 릴리스됐습니다.

Microsoft.Data.SqlClient 6.1.0
; https://www.nuget.org/packages/microsoft.data.sqlclient

지원 범위에 .NET Standard 2.0이 있어,

.NET Standard
; https://learn.microsoft.com/en-us/dotnet/standard/net-standard?tabs=net-standard-2-0

원칙상 .NET Core 2.0 이상의 환경을 지원한다는 건데요, 그런데 실제로 해보면 .NET 8 미만의 환경에서는,

internal class Program
{
    // .NET 7 이하의 프로젝트
    // Install-Package Microsoft.Data.SqlClient
    static void Main(string[] args)
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Parameters.AddWithValue("@param1", "value1");
    }
}

SqlCommand 타입이 가진 대부분의 필드가 아래의 화면처럼,

sqlclient_null_ref_1.png

Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.Data.SqlClient.SqlCommand.get_Parameters()
   at ConsoleApp1.Program.Main(String[] args)

null 참조 예외가 발생합니다. 디버깅 시 소스 코드로 들어가 보면 이런 식으로 구성이 되어 있는데,


...[생략]...
public bool EnableOptimizedParameterBinding { get { throw null; } set { } }
/// <include file='../../../../doc/snippets/Microsoft.Data.SqlClient/SqlCommand.xml' path='docs/members[@name="SqlCommand"]/Parameters/*'/>
public new Microsoft.Data.SqlClient.SqlParameterCollection Parameters { get { throw null; } }
/// <include file='../../../../doc/snippets/Microsoft.Data.SqlClient/SqlCommand.xml' path='docs/members[@name="SqlCommand"]/Transaction/*'/>
[System.ComponentModel.BrowsableAttribute(false)]
[System.ComponentModel.DesignerSerializationVisibilityAttribute(0)]
public new Microsoft.Data.SqlClient.SqlTransaction Transaction { get { throw null; } set { } }
...[생략]...

전형적인 참조 어셈블리의 내용입니다. 확인을 위해 디버깅 상태에서 모듈 창을 열어 DLL 경로를 알아내,

C:\temp\WebApplication1\WebApplication2\bin\Debug\net7.0\Microsoft.Data.SqlClient.dll

파일을 찾아가 보면 크기가 약 78KB인데요, nuget 패키지의 경로를 통해 다른 DLL과 비교하면,

[참조 어셈블리: 약 78KB]
"...nuget_root...\Microsoft.Data.SqlClient\extracted\6.1.0\ref\netstandard2.0\Microsoft.Data.SqlClient.dll"

[구현 어셈블리: 약 2MB]
"...nuget_root...\Microsoft.Data.SqlClient\extracted\6.0.2\runtimes\win\lib\net8.0\Microsoft.Data.SqlClient.dll"

확실히 참조 어셈블리가 맞습니다.




근본적인 원인은 패키지 오류인 듯합니다. 설치된 "microsoft.data.sqlclient.6.1.0.nupkg" 파일을 열어보면, ".\lib\netstandard2.0" 디렉터리에 참조 어셈블리가 들어 있습니다. 유사하게 ".\lib\net462"에는 구현 어셈블리가 들어 있는 것으로 봐서 아마도 패키지를 생성하는 담당자가 실수를 한 것이 아닌가... 싶습니다.

이슈 제기 중...




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 8/5/2025]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 31  32  33  34  35  [36]  37  38  39  40  41  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
13103정성태7/22/202219170오류 유형: 818. WSL - systemd-genie와 관련한 2가지(systemd-remount-fs.service, multipathd.socket) 에러
13102정성태7/19/202218380.NET Framework: 2033. .NET Core/5+에서는 구할 수 없는 HttpRuntime.AppDomainAppId
13101정성태7/15/202232451도서: 시작하세요! C# 10 프로그래밍
13100정성태7/15/202220904.NET Framework: 2032. C# 11 - shift 연산자 재정의에 대한 제약 완화 (Relaxing Shift Operator)
13099정성태7/14/202219761.NET Framework: 2031. C# 11 - 사용자 정의 checked 연산자파일 다운로드1
13098정성태7/13/202217454개발 환경 구성: 647. Azure - scale-out 상태의 App Service에서 특정 인스턴스에 요청을 보내는 방법 [1]
13097정성태7/12/202216488오류 유형: 817. Golang - binary.Read: invalid type int32
13096정성태7/8/202219253.NET Framework: 2030. C# 11 - UTF-8 문자열 리터럴
13095정성태7/7/202216636Windows: 208. AD 도메인에 참여하지 않은 컴퓨터에서 Kerberos 인증을 사용하는 방법
13094정성태7/6/202216192오류 유형: 816. Golang - "short write" 오류 원인
13093정성태7/5/202216948.NET Framework: 2029. C# - HttpWebRequest로 localhost 접속 시 2초 이상 지연
13092정성태7/3/202219477.NET Framework: 2028. C# - HttpWebRequest의 POST 동작 방식파일 다운로드1
13091정성태7/3/202218689.NET Framework: 2027. C# - IPv4, IPv6를 모두 지원하는 서버 소켓 생성 방법 [1]
13090정성태6/29/202218127오류 유형: 815. PyPI에 업로드한 패키지가 반영이 안 되는 경우
13089정성태6/28/202218373개발 환경 구성: 646. HOSTS 파일 변경 시 Edge 브라우저에 반영하는 방법
13088정성태6/27/202216689개발 환경 구성: 645. "Developer Command Prompt for VS 2022" 명령행 환경의 폰트를 바꾸는 방법
13087정성태6/23/202219475스크립트: 41. 파이썬 - FastAPI / uvicorn 호스팅 환경에서 asyncio 사용하는 방법 [1]
13086정성태6/22/202219641.NET Framework: 2026. C# 11 - 문자열 보간 개선 2가지파일 다운로드1
13085정성태6/22/202218528.NET Framework: 2025. C# 11 - 원시 문자열 리터럴(raw string literals)파일 다운로드1
13084정성태6/21/202219012개발 환경 구성: 644. Windows - 파이썬 2.7을 msi 설치 없이 구성하는 방법
13083정성태6/20/202218924.NET Framework: 2024. .NET 7에 도입된 GC의 메모리 해제에 대한 segment와 region의 차이점 [2]
13082정성태6/19/202217955.NET Framework: 2023. C# - Process의 I/O 사용량을 보여주는 GetProcessIoCounters Win32 API파일 다운로드1
13081정성태6/17/202216202.NET Framework: 2022. C# - .NET 7 Preview 5 신규 기능 - System.IO.Stream ReadExactly / ReadAtLeast파일 다운로드1
13080정성태6/17/202218108개발 환경 구성: 643. Visual Studio 2022 17.2 버전에서 C# 11 또는 .NET 7.0 preview 적용
13079정성태6/17/202215184오류 유형: 814. 파이썬 - Error: The file/path provided (...) does not appear to exist
13078정성태6/16/202219300.NET Framework: 2021. WPF - UI Thread와 Render Thread파일 다운로드1
... 31  32  33  34  35  [36]  37  38  39  40  41  42  43  44  45  ...