C++/CLI 项目(在 .Net v4.7.2 和 CLR 下编译正常,给出“错误 C3699 '^':无法在类型上使用此间接寻址”,在 /clr:netcore 和 .Net 6 下

问题描述 投票:0回答:1

我是 Microsoft 环境的新手,因此,如果我发布了错误的查询或标签,请接受我的歉意。 我有一组与 .net Framework v4.7.2 和 /CLR 支持配合良好的 C++/CLI 项目,现在我收到了将 .net 技术堆栈迁移到 /CLR:NetCore 和 .Net v6 的要求。 0。当我使用帽子运算符“^”更改使用托管代码的项目的属性时,几乎每一行包含托管代码的代码都会给出“错误 C3699 '^':无法在类型上使用此间接寻址” 例如一行代码如下:

System::Net::Mail::SmtpClient^ smtpClient = gcnew System::Net::Mail::SmtpClient(gcnew System::String(serverAddress));

导致此错误:错误C3699:“^”:无法在类型“System::ComponentModel::AsyncOperation”上使用此间接寻址

另一个例子:

以下代码行

System::Net::Mail::MailMessage^ message = gcnew System::Net::Mail::MailMessage(from, to);

导致错误:“错误 C3699:'^':无法在类型 'System::Collections::Specialized::NameValueCollection' 上使用此间接寻址”

为了使用不同的类,我在我的 C++ 项目中安装了 Mailkit Nuget 包,并编写了一段简单的代码,例如:

MimeKit::MimeMessage^ l_eMail = gcnew MimeKit::MimeMessage(); l_eMail->发件人->添加(gcnew MailboxAddress(gcnew System::String(""), gcnew System::String("[email protected]")));

第二行给出编译错误: 错误 C3699:“^”:无法在“System::Net::Mail::MailAddressCollection”类型上使用此间接寻址

.net-core c++-cli .net-6.0 clr
1个回答
0
投票

感谢那些投反对票的人,他们鼓励我自己找到解决方案。问题是对 C++ 项目的“系统”引用,它与 .NetCore 和 .Net 6 环境下的特定托管类(如 SmtpClient、SqlClient 等)发生冲突。 删除“系统”引用并安装缺失/过时类的 NuGet 包解决了我的间接错误。

谢谢大家。

© www.soinside.com 2019 - 2024. All rights reserved.