- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近将我们所有的测试项目从 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/
我是一名优秀的程序员,十分优秀!