启用生成序列化程序集时使用 C++/CLI dll

本文关键字:C++ CLI dll 序列化 程序集 启用 | 更新日期: 2023-09-27 18:35:38

我有一个C++/CLI dll,它包装了一些我想在C#项目中使用的本机C++代码。

如果Generate serialization assembly属性设置为 AutoOff,则一切正常。但是,当我将此属性设置为 On 时,出现以下错误:SGEN : error : An attempt was made to load an assembly with an incorrect format: example.dll

任何不需要禁用序列化程序集的解决方案?

启用生成序列化程序集时使用 C++/CLI dll

C++/CLI 程序集包含非托管代码,它只能由使用相同目标体系结构运行的程序加载。 SGen 加载它以获取对元数据的访问权限。 SGen.exe有两个版本,一个32位和一个64位版本。

因此,如果 32 位版本的 SGen 尝试加载 C++/CLI 程序集的 x64 版本,则会出现此错误。 或者反过来。 可以通过查看详细的 MSBuild 跟踪并注意 sgen.exe 路径来诊断它。>项目和解决方案>生成和运行> MSBuild 项目生成输出详细程度 = 详细 = 详细>选项。 32 位版本的 sgen.exe 位于"NETFX 4.x Tools"目录中,64 位版本位于"NETFX 4.6 Tools''x64"目录中。

获得

该工具错误位数的经典方法是,尚未将 C# 项目配置为与 C++/CLI 项目的目标体系结构兼容。 右键单击它>"属性">"生成"选项卡>"平台目标设置"。 使其与 C++/CLI 项目目标匹配。 如果你选择x86或AnyCPU,那么你会得到32位版本的SGen,x64会产生64位版本的SGen。