繁体   English   中英

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

[英]Using C++/CLI dll when generate serialization assembly is enabled

我有一个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程序集包含非托管代码,只能由运行相同目标体系结构的程序加载。 SGen加载它以访问元数据。 SGen.exe有两个版本,一个32位版本和一个64位版本。

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

当您没有将C#项目配置为与C ++ / CLI项目的目标体系结构兼容时,会误认为该工具的经典用法。 右键单击它>属性>构建选项卡>平台目标设置。 使它与您的C ++ / CLI项目目标相匹配。 如果选择x86或AnyCPU,则将获得SGen的32位版本,而x64将获得SGen的64位版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM