8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

Winform(.Netcore8)中的 C++ CLR 库(DLL)中的 C4642 警告

NMR 3月前

78 0

我在 .NetCore 8 中使用 Winform 的 C++ CLR DLL 中收到此警告警告 C4642:“IHandle”:无法导入泛型参数“THandle”的约束警告 C4642:“HandleRef”:无法

我在 .NetCore 8 中使用 Winform 的 C++ CLR DLL 中收到此警告

warning C4642: 'IHandle': could not import the constraints for generic parameter 'THandle'
warning C4642: 'HandleRef': could not import the constraints for generic parameter 'THandle'

问题是,即使是一个非常干净的项目,这个警告也只是在默认代码中存在。

以下是我尝试重现警告的步骤和方法。

  1. 创建新项目并选择“CLR 类库 (.NET)”
  2. 通过以下方式添加新表单:添加->新项目-> UI->窗口表单
  3. 打开 .vcxproj 并删除对
    System, 
    System.Data
    System.Drawing
    System.Windows.Forms
    System.Xml

并替换为

<FrameworkReference Include="Microsoft.WindowsDesktop.App.WindowsForms" />

构建并清理,然后出现警告。

事实上,这只是一个单元测试,我们移植的实际项目最初是一个 Winform C++ CLR 应用程序,现在构建为一个 DLL 并有一个 C# 主机以使其与 .netcore 8 一起工作。

可以成功编译并打开。

我们有很多这样的警告,因为到处都有大量的表格。

有什么想法可以解决这个问题吗,或者我们应该抑制这个警告?

帖子版权声明 1、本帖标题:Winform(.Netcore8)中的 C++ CLR 库(DLL)中的 C4642 警告
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由NMR在本站《.net》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 使用具有托管标识的 Azure SQL DB 身份验证在执行数据库命令时出现错误“用户 '' 登录失败”。这是我的代码:public ReturnData GetDa...

    使用带有托管标识的 Azure SQL DB 身份验证出现错误

    \'用户''登录失败\'

    执行数据库命令时。这是我的代码:

        public ReturnData GetData()
        {
            string connectionString = "Server=database.windows.net,1433;Initial Catalog=Mydatabase;"
            var credential = new DefaultAzureCredential();
            var token = credential.GetToken(new Azure.Core.TokenRequestContext(new[] {"https://database.windows.net/.default" }));
            SqlConnection sqlConnection = new SqlConnection(connectionString);
            sqlConnection.AccessToken = token.Token;
            Database database = new SqlDatabase(sqlConnection.ConnectionString);
            using(DbCommand dbCommand=database.GetStoredProcCommand(DatabaseConstants.Procedure_Name))
            {
                dbCommand.CommandTimeout=3600;
                ((SqlDatabase)database).AddInParameter(dbCommand,DatabaseConstants.D_ATM, DbType.Int32, id);
                DataSet dataSet = database.ExecuteDataSet(dbCommand);  if(dataSet!=null&&dataSet.Tables.Count>0&&dataSet.Tables[0].Rows.Count > 0)
                {
                    DataRow row = dataSet.Tables[0].Rows[0];
                }
            }
        }
    

    还添加了用户级别权限。需要解决此问题。

  • 用户无权访问 Azure SQL 服务器,这可能是导致 login failed for user 错误的原因。您可以按照以下步骤使用系统分配的托管身份验证从 Azure Web API 连接 Azure SQL 服务器:

    在 Appsetting.json 中使用以下格式的连接字符串:

    "ConnectionStrings": {
            "QuotesDatabase": "Server=tcp:<servename>.database.windows.net,1433; Database=<databasename>;" }
    
    

    使用以下代码进行连接。

    var connectionString = Configuration.GetConnectionString("<connectionstringname>");
                    services.AddTransient(a =>{
                        var sqlConnection = new SqlConnection(connectionString);
                        var credential = new DefaultAzureCredential();
                        var token = credential
                                .GetToken(new Azure.Core.TokenRequestContext(
                                    new[] { "https://database.windows.net/.default" }));
                        sqlConnection.AccessToken = token.Token;
                        return sqlConnection;
    
    

    根据需要将活动目录管理员设置为 SQL 服务器,如下所示:

    enter image description here

    选择 Azure 服务身份验证的管理员帐户来检索令牌凭据,如下所示:

    enter image description here

    在 Azure 应用服务的状态下启用系统分配的管理标识。

    enter image description here

    使用管理员身份登录 SQL Server,将用户添加到数据库并为用户分配角色

    create user [<appName>] from external provider;
    alter role db_datareader add member [<appName>];
    alter role db_datawriter add member [<appName>];
    
    

    enter image description here

    数据库将成功连接到应用程序,如下所示:

    enter image description here

    欲了解更多信息,你可以参考类似的 SO 线程 .

  • 感谢您的回放,我们按照上述所有步骤操作,但在执行该过程时仍然遇到同样的问题 System.Data.SqlClient.SqlException:'用户登录失败'。

  • 使用以下代码工作正常。SqlCommand command=new SqlCommand(\'DatabaseConstants.Procedure_Name\',sqlConnection); command.CommandType=CommandType.StoredProcedure; 使用以下代码时发现用户登录失败''错误 using(DbCommand dbCommand=database.GetStoredProcCommand(DatabaseConstants.Procedure_Name)){ DataSet attachmentsDataSet = database.ExecuteDataSet(dbCommand);} 我观察到 SqlCommand 中两个命令的差异,我们得到了 DBConnection 值。对于使用 DbCommand 观察者,DBConnection 中的值为空

  • Mask 3月前 0 只看Ta
    引用 6

    DbCommand 出现“用户登录失败”错误是因为数据库连接未正确分配。在执行 DbCommand 之前,请明确创建、打开并分配数据库连接,以确保正确管理连接。

返回
作者最近主题: