LibraryImportAttribute 错误地声明使用扩展方法并阻止编译

LibraryImportAttribute incorrectly stating use of extension method and preventing compilation

提问人:IamIC 提问时间:7/14/2023 最后编辑:IamIC 更新时间:7/14/2023 访问量:102

问:

我正在使用今天更新的 .NET 8 预览版 6 和 Visual Studio 2022。

我今天更新了一个库,从 更改为 ,但它表示 .DllImportLibraryImportCS0755

这是我导入的方法声明:

public unsafe static partial class CppCoreFuncs
{
    #region private
    [LibraryImport(DLL, EntryPoint = "Poly2Cofs_multi_buf"), SuppressUnmanagedCodeSecurity]
    private static partial FuncResult Poly2CofsMultiBuf(void* buffer, InputMode mode);
    #endrgion

...
}

这将生成以下代码:

public unsafe static partial class CppCoreFuncs
{
    [System.Runtime.InteropServices.DllImportAttribute("CPP Core.dll", EntryPoint = "Poly2Cofs_multi_buf", ExactSpelling = true)]
    private static extern partial global::RWT.ROCT.Core.Public.FuncResult Poly2CofsMultiBuf(void* buffer, global::RWT.ROCT.Core.Public.InputMode mode);
}

当我编译时,我得到这个:

错误 CS0755 两个部分方法声明都必须是扩展 方法或两者都可能不是扩展方法...... 核心\Microsoft.Interop.LibraryImportGenerator\Microsoft.Interop.LibraryImportGenerator\LibraryImports.g.cs

文档:平台调用的源生成

没有扩展方法。如果我改回,那么下一个方法导入声明会得到这个错误。它只出现一次。DLLImportLibraryImport

编辑

作为参考,这里有一个工作代码生成器生成的存根:GeneratedRegexAttribute

[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Text.RegularExpressions.Generator", "8.0.8.32907")]
    internal static partial global::System.Text.RegularExpressions.Regex QuotedOrUnquotedNewLineRx() => global::System.Text.RegularExpressions.Generated.QuotedOrUnquotedNewLineRx_7.Instance;
C# 编译器错误 互操作 源生成器 .NET-8.0

评论

0赞 IamIC 7/14/2023
可能。不过,我看不出哪个属性不匹配。
0赞 IamIC 7/14/2023
DLLImportAttribute是编译器生成的。顶部代码是我的,底部来自代码生成器。
0赞 Ben Voigt 7/14/2023
规范是这样说的:“生成的方法声明中的属性是定义和实现部分方法声明的组合属性,顺序未指定。不会删除重复项。
0赞 IamIC 7/14/2023
我仍然不明白我犯了什么错误,如果有的话。我的代码看起来与文档中的代码相同。我的代码或生成的代码中都没有扩展方法。
0赞 Ben Voigt 7/14/2023
根据我所读到的内容,该源生成器应该生成一个包装器,用于处理参数封送(输入和输出),并在两者之间调用 DLL 函数。因此,包装函数(应该是 c# 函数)应该是分部方法,然后它对 DLL 的内部调用应该具有不同的名称。我不知道为什么它生成 DllImport 作为分部方法。我想如果它决定不需要包装器,那可能会有用吗?

答: 暂无答案