无法加载文件或程序集'Microsoft.Data.SqlClient [英] Could not load file or assembly 'Microsoft.Data.SqlClient

查看:2001
本文介绍了无法加载文件或程序集'Microsoft.Data.SqlClient的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我成功地从框架4.7.2测试项目中调用了.net标准2.0库。



如果我使用.net standard 2.0 dll(SBD.Standard)并创建一个引用了新的Winforms项目然后我被要求添加

  Microsoft.EntityFrameworkCore,
然后添加Microsoft.EntityFrameworkCore.SqlServer,
然后Microsoft.Data.SqlClient

然后我的项目成功运行。 (尽管最好自动添加额外的软件包)





但是,如果我尝试通过使用Azure DevOps构建的Nuget软件包分发库,则会出现麻烦。



但是,当我通过Nuget分发标准库时(使用Azure DevOps创建Nuget)并将其包含在新项目中。我有一个错误。



调用堆栈为

  System.IO.FileNotFoundException:无法加载文件或程序集'Microsoft.Data.SqlClient,Version = 1.0.19269.1,Culture = neutral,PublicKeyToken = 23ec7fc2d6eaa4a5'或其中之一依赖性。该系统找不到指定的文件。 Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerConnection.CreateDbConnection()的
Microsoft.EntityFrameworkCore.Storage.RelationalConnection.get_DbConnection()的
Microsoft.EntityFrameworkCore.Storage.RelationalCommand.CreateCommand的
(RelationalCommandParameterObject parameterObject,Guid commandId,DbCommandMethod commandMethod)Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
在Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.InitializeReader(DbContext _,布尔结果)Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute [TState,TResult](TState状态,Func`3操作,Func`3 verifySucceeded)
在Microsoft.EntityFrameworkCore .Query.Internal.QueryingEnumerable`1.Enumerator.MoveNext()
at System.Linq.Enumerable.SingleOrDefault [TSource](IEnumerable`1 source)
在SBD.Standard.Helpers.HandyFuncs.QueueCommand(ApiDbContext connect,WorkTypeEnum workType,String

导致问题的代码是

  public static int QueueCommand(ApiDbContext connect,WorkTypeEnum workType,字符串描述,int jobId,int签名,XElement elem)
{
var command =
connect.EngineCommandQueues.SingleOrDefault(
c =>
(c.Status == 0 || c.Status == 2)&&
c.Signature ==签名);

我确实发现我需要安装以下软件包

  Microsoft.EntityFrameworkCore 3.1.1 
与Microsoft.Data.SqlClient相关的Microsoft.EntityFrameworkCore.SqlServer 3.1.1> = 1.019269.1

我看到已安装Microsoft.Data.SQLClient v1.0.19269.1



我尝试安装System.Linq



我在Nuget中看到Microsoft.Data.SqlClient的注释


在Windows上运行时,该库依赖.NET Framework上的
Microsoft.Data.SqlClient.SNI


并安装了Microsoft.Data.SqlClient.SNI v1.0.19235.1



我尝试将Microsoft.Data.SqlClient升级到1.1,错误更改为

  System.TypeInitializationException: Microsoft.Data.SqlClient.TdsParser的类型初始值设定项引发了异常。 ---> System.TypeInitializationException: Microsoft.Data.SqlClient.SNILoadHandle的类型初始值设定项引发了异常。 ---> System.TypeInitializationException: Microsoft.Data.SqlClient.SNINativeMethodWrapper的类型初始值设定项引发了异常。 ---> System.ComponentModel.Win32Exception:无法加载C:\Dev2\Combridge\SBD.ComBridge\UnitTestProjectStandard\bin\Debug\x86\SNI.dll ---> System.ComponentModel.Win32Exception:在E:\agent1\_work\31\s\src\中的Microsoft.Data.SqlClient.SNINativeMethodWrapper..cctor()处找不到指定的模块
Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\Interop\SNINativeMethodWrapper.cs:第64行
---内部异常堆栈跟踪的结尾--- Microsoft的
Microsoft.Data中的.Data.SqlClient.SNINativeMethodWrapper.SNIInitialize()
,位于E..agent1\_work\31\s\src\Microsoft.Data中的Microsoft.Data.SqlClient.SNILoadHandle..ctor() .SqlClient\netfx\src\Microsoft\Data\SqlClient\TdsParserSafeHandles.cs:第36行
在E:\agent1\中的Microsoft.Data.SqlClient.SNILoadHandle..cctor() _work\31\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\TdsParserSafeHandles.cs:第17行
-内部结尾异常堆栈跟踪--- E:$ agent1\_work\31\sDatasrc\Microsoft.Data.SqlClient\中Microsoft.Data.SqlClient.TdsParser..cctor()处的
netfx\src\Microsoft\Data\SqlClient\TdsParser.cs :line 166
---内部异常堆栈跟踪的结尾---
at Microsoft.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,UInt32 waitForMultipleObjectsTimeout,布尔值allowCreate,布尔值onlyOneCheckConnection,DbConnectionOptions userOptions,DbConnectionInternal& ;连接)在E:\agent1\_work\31\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\ProviderBase\DbConnectionPool.cs:第1411行Microsoft:Data.ProviderBase.DbConnectionPool.TryGetConnection中的
(DbConnection owningObject,TaskCompletionSource`1重试,DbConnectionOptions userOptions,DbConnectionInternal& Connection)在E:\agent1\_work\31\s\src\ Microsoft.Data.SqlClient NETFx src Microsoft DATA ProviderProvider DbConnectionPool.cs:行1310
在Microsoft.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection,TaskCompletionSource`1重试,DbConnectionOptions userOptions,DbConnectionInternal oldConnection,DbConnectionInternal& Connection)中的E:\agent1\_work\31\srcsrc\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\ ProviderBase\DbConnectionFactory.cs:行357
在Microsoft.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection externalConnection,DbConnectionFactory connec E:\agent1\_work\31\srcsrc\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\ProviderBase中的tionFactory,TaskCompletionSource`1重试,DbConnectionOptions userOptions) EDbConnectionInternal.cs:行773
在E.\agent1Base_work\31中的Microsoft.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection externalConnection,DbConnectionFactory connectionFactory,TaskCompletionSource`1 retry,DbConnectionOptions userOptions) Microsoft.Data.SqlClient Netfx Microsoft SQL Server ProviderBase DbConnectionClosed.cs:第72行
,位于Microsoft.Data.SqlClient.SqlConnection.TryOpenInner(重试TaskCompletionSource`1),位于E:\agent1_work_31\srcsMicrosoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\SqlConnection.cs :行1860
在E:\agent1\_work\31\srcsrc\Microsoft.Data.SqlClient\中的Microsoft.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) netfx\src\Microsoft\Data\SqlClient\SqlConnection.cs:行1853
在M E:\agent1\_work\31\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\中的icrosoft.Data.SqlClient.SqlConnection.Open() SqlClient\SqlConnection.cs:行1421
在Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(布尔错误预期)
在Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(布尔错误预期)
在Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
在Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.InitializeReader(DbContext _,Boolean结果)Microsoft.EntityFrameworkCore.SqlServer上的
.Storage.Internal.SqlServerExecutionStrategy.Execute [TState,TResult](TState状态,Func`3操作,Func`3验证成功)
at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.MoveNext()$ System.Linq.Enumerable.SingleOrDefault [TSource](IEnumerable`1来源的b $ b )lambda_method(Closure,QueryContext)的
。Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute [TResult](表达式查询)的
。Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider的
。在System.Linq.Queryable.FirstOrDefault [TSource](IQueryable`1源)上执行[TResult](表达式)

[更新]
阅读



[更新]



我尝试用

替换Yaml的包装部分-任务:DotNetCoreCLI @ 2 
输入:
命令:'pack'
selectOrConfig:'config'
nu getConfigPath:'$(System.DefaultWorkingDirectory)/NuGet.config'
外部端点:$(externalFeedCredential)

现在我得到资源授权问题



当我单击按钮进行授权时,我收到一条消息:权限不足或缺少资源。即使我以存储库所有者的身份登录。



我想我需要学习在外部端点中放置什么内容



[更新]



我尝试了此操作

 -任务:DotNetCoreCLI @ 2 
输入:
命令:'pack'
outputDir:'$(Build.ArtifactStagingDirectory)/ TestDir'

现在错误变成

 错误MSB4057:目标包装在项目中不存在。 

正在调查此答案

解决方案


虽然最好自动添加额外的软件包


假设我们有一个 .net标准项目,该项目取决于 Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.SqlServer 和其他软件包。我们的预期行为是创建一个nuget程序包,该程序包的 xx.nuspec 文件中包含有关依赖性



但是有关于 nuget pack 命令的一个问题,它不起作用适用于.net核心/标准项目。 nuget pack dotnet pack 都可以创建 .net标准 nuget包成功,但是包成功并不意味着好的包。



在上述问题的影响下,由 nuget pack 创建的软件包将失去对<$ c $的依赖。 c> Package.nuspec 文件。
(将xx.nupkg重命名为xx.zip,然后我们可以检查包中的内容,我们将看到 xx.nuspec 文件)



上述步骤可能会导致运行时错误,例如缺少程序集。因此,理想的是自动添加额外的软件包并避免丢失参考,对于使用PackageReference格式的项目,建议使用 dotnet pack 命令。 (无论是本地的dotnet pack命令还是Azure Devops Piepilne中的dotnet pack任务)


I am calling a .net standard 2.0 library from a framework 4.7.2 test project sucessfully.

If I take my .net standard 2.0 dll (SBD.Standard) and create a new winforms project that references it then I get asked to add

Microsoft.EntityFrameworkCore, 
then Microsoft.EntityFrameworkCore.SqlServer, 
then Microsoft.Data.SqlClient 

and then my project runs successfully. (Although it would be ideal if the extra packages were added automatically)

However trouble occurs if I try to distribute my library via a Nuget Package built using Azure DevOps.

However when I distribute the standard library via Nuget ( Using Azure DevOps to create the Nuget ) and include it in a new project I have an error.

The call stack is

System.IO.FileNotFoundException : Could not load file or assembly 'Microsoft.Data.SqlClient, Version=1.0.19269.1, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5' or one of its dependencies. The system cannot find the file specified.
   at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerConnection.CreateDbConnection()
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.get_DbConnection()
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.CreateCommand(RelationalCommandParameterObject parameterObject, Guid commandId, DbCommandMethod commandMethod)
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.InitializeReader(DbContext _, Boolean result)
   at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.MoveNext()
   at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
   at SBD.Standard.Helpers.HandyFuncs.QueueCommand(ApiDbContext connect, WorkTypeEnum workType, String 

The line of code that is causing the issue is

public static int QueueCommand(ApiDbContext connect, WorkTypeEnum workType, string description, int jobId, int signature, XElement elem)
{
    var command =
        connect.EngineCommandQueues.SingleOrDefault(
            c =>
                (c.Status == 0|| c.Status == 2) &&
                c.Signature == signature);

I did find that I needed to install the following packages

Microsoft.EntityFrameworkCore 3.1.1
Microsoft.EntityFrameworkCore.SqlServer 3.1.1 which has a dependency on Microsoft.Data.SqlClient >=1.019269.1

I see that Microsoft.Data.SQLClient v1.0.19269.1 is intalled

I tried installing System.Linq

I see the note in Nuget for Microsoft.Data.SqlClient

When running on Windows, this library has a dependency on Microsoft.Data.SqlClient.SNI on .NET Framework

and have Microsoft.Data.SqlClient.SNI v1.0.19235.1 installed

I tried upgrading Microsoft.Data.SqlClient to 1.1 and the error changed to

System.TypeInitializationException: The type initializer for 'Microsoft.Data.SqlClient.TdsParser' threw an exception. ---> System.TypeInitializationException: The type initializer for 'Microsoft.Data.SqlClient.SNILoadHandle' threw an exception. ---> System.TypeInitializationException: The type initializer for 'Microsoft.Data.SqlClient.SNINativeMethodWrapper' threw an exception. ---> System.ComponentModel.Win32Exception: Failed to load C:\Dev2\Combridge\SBD.ComBridge\UnitTestProjectStandard\bin\Debug\x86\SNI.dll ---> System.ComponentModel.Win32Exception: The specified module could not be found
    at Microsoft.Data.SqlClient.SNINativeMethodWrapper..cctor() in E:\agent1\_work\31\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\Interop\SNINativeMethodWrapper.cs:line 64
--- End of inner exception stack trace ---
    at Microsoft.Data.SqlClient.SNINativeMethodWrapper.SNIInitialize()
   at Microsoft.Data.SqlClient.SNILoadHandle..ctor() in E:\agent1\_work\31\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\TdsParserSafeHandles.cs:line 36
   at Microsoft.Data.SqlClient.SNILoadHandle..cctor() in E:\agent1\_work\31\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\TdsParserSafeHandles.cs:line 17
--- End of inner exception stack trace ---
    at Microsoft.Data.SqlClient.TdsParser..cctor() in E:\agent1\_work\31\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\TdsParser.cs:line 166
--- End of inner exception stack trace ---
    at Microsoft.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) in E:\agent1\_work\31\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\ProviderBase\DbConnectionPool.cs:line 1411
   at Microsoft.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) in E:\agent1\_work\31\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\ProviderBase\DbConnectionPool.cs:line 1310
   at Microsoft.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) in E:\agent1\_work\31\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\ProviderBase\DbConnectionFactory.cs:line 357
   at Microsoft.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) in E:\agent1\_work\31\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\ProviderBase\DbConnectionInternal.cs:line 773
   at Microsoft.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) in E:\agent1\_work\31\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\ProviderBase\DbConnectionClosed.cs:line 72
   at Microsoft.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) in E:\agent1\_work\31\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\SqlConnection.cs:line 1860
   at Microsoft.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) in E:\agent1\_work\31\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\SqlConnection.cs:line 1853
   at Microsoft.Data.SqlClient.SqlConnection.Open() in E:\agent1\_work\31\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\SqlConnection.cs:line 1421
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.InitializeReader(DbContext _, Boolean result)
   at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.MoveNext()
   at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
   at lambda_method(Closure , QueryContext )
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query)
   at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression)
   at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)

[Update] Reading This GitHub post it seems it could have something to do with Azure Devops

The post mentions

Win32Exception: Failed to load C:__source_code\repo1\Simplified\bin\x86\SNI.dll So it's trying to load the 32 bit version of sni.dll and it isn't present.

That makes me suspect that you build it on a 64 bit system and then just transferred the files to the other machine. You need to publish the project for an x86 target to get the right native dependency resolved. Give it a try.

I am running Windows 10 so I dont see why it would be trying to load a 32 bit version of sni.dll

I can see in the Azure Artifiacts

Microsoft.Data.SqlClient.SNI 1.0.19235.1

[Update]

I see from this question that I need to force MSBuild to create / update a YourProject.dll.config file containing the necessary binding redirects. So Nuget should be creating that config file too. I wonder how that effects things.

My azure-pipelines.yml is

# .NET Desktop
# Build and run tests for .NET Desktop or Windows classic desktop solutions.
# Add steps that publish symbols, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/apps/windows/dot-net

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'
  Major: '2'
  Minor: '0'
  Patch: '0'

steps:
- task: NuGetToolInstaller@0
  inputs:
    versionSpec: '>=4.3.0'
    checkLatest: true

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: NuGetCommand@2
  inputs:
    command: pack
    packagesToPack: '**/*.csproj'
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(Major)'
    minorVersion: '$(Minor)'
    patchVersion: '$(Patch)'

- task: NuGetCommand@2
  inputs:
    command: pack
    packagesToPack: '**/*.vbproj'
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(Major)'
    minorVersion: '$(Minor)'
    patchVersion: '$(Patch)'

- task: NuGetCommand@2
  displayName: 'NuGet push'
  inputs:
    command: push
    publishVstsFeed: 'SBDCommonFeed'
    allowPackageConflicts: true

[Update]

I tried changing the yaml to use dotnet pack but get an error

[Update]

I tried replacing the pack section of the yaml with

- task: DotNetCoreCLI@2
  inputs:
    command: 'pack'
    selectOrConfig: 'config'
    nugetConfigPath: '$(System.DefaultWorkingDirectory)/NuGet.config'
    externalEndpoints: $(externalFeedCredential)

Now I get Resource Authorization Issue

When I click the button to authorize I get a message: insufficient permissions or missing resources. Even though I am logged in as the repository owner.

I guess I need to learn what to put in externalEndpoints

[Update]

I tried this instead

- task: DotNetCoreCLI@2
  inputs: 
    command: 'pack'
    outputDir: '$(Build.ArtifactStagingDirectory)/TestDir'

Now the error becomes

 error MSB4057: The target "pack" does not exist in the project.

investigating this answer

解决方案

Although it would be ideal if the extra packages were added automatically.

Assuming we have one .net standard project which depends on Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.SqlServer and other packages. The expected behavior for us is to create a nuget package in whose xx.nuspec file has definitions about the dependencies.

But there's one issue about nuget pack command, it can't work well for .net core/standard project. Both nuget pack and dotnet pack can create .net standard nuget packages successfully, but pack successfully doesn't mean good package.

With the effect of the issue above, package created by nuget pack will lose some dependencies in Package.nuspec file. (Rename xx.nupkg to xx.zip, then we can check the content inside package, we'll see the xx.nuspec file)

And above step can cause runtime error like missing assembly. So to make it ideal that the extra packages are added automatically and avoid missing reference, we recommend dotnet pack command for projects using PackageReference format. (No matter dotnet pack command locally or dotnet pack task in Azure Devops Piepilne)

这篇关于无法加载文件或程序集'Microsoft.Data.SqlClient的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆