gpt4 book ai didi

c# - 如何让 MSBuild 生成与平台无关的 COMReference?

转载 作者:行者123 更新时间:2023-11-30 14:15:50 25 4
gpt4 key购买 nike

我最近将我们所有的测试项目从 dotnet 4 切换到 dotnet 3.5(因为我想在 CLR 2.0 下测试代码(请参阅 here)。大多数情况下工作正常,但一个测试项目依赖于 IWshRuntimeLibrary。这是由以下 csproj 片段指定:

<COMReference Include="IWshRuntimeLibrary">
<Guid>{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>False</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>

我们将测试项目构建为“AnyCPU”。当测试项目是 .Net 4 时,这似乎 生成了一个 ANYCPU 互操作 dll。现在是 .Net 3.5,互操作 dll 是 x86,这会在 64 位平台上的运行时导致 System.BadImageFormatException。在降级测试项目之前没有出现此问题。

最佳答案

似乎 是正确的,在 Visual Studio 中导入类型库总是会在互操作程序集 header 中设置 32 位标志。您可以通过在生成的程序集上运行 corflags.exe 来查看这一点。

不支持从 VS 创建与平台无关的互操作库。您必须自己运行 Tlbimp.exe。使用 Visual Studio 命令提示符并导航到您的项目目录。然后运行这个命令:

Tlbimp /machine:Agnostic c:\windows\system32\wshom.ocx

并使用“项目”+“添加引用”、“浏览”选项卡添加对生成的 Interop.IWshRuntimeLibrary.dll 的引用。可以在源代码管理中 checkin DLL,COM 接口(interface)是一成不变的。将主 EXE 项目的平台目标设置为 x86 是另一种解决方法。

关于c# - 如何让 MSBuild 生成与平台无关的 COMReference?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9159785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com