【问题标题】:Powershell and enums defined in C++/CLI assemblyC++/CLI 程序集中定义的 Powershell 和枚举
【发布时间】:2023-03-30 01:41:01
【问题描述】:

我有一个用 C++/CLI 编写的程序集,其中包含如下定义的枚举堆,在单个头文件中一个接一个地定义。

namespace Fix
{
    public enum class Side
    {
        SideBuy = '1',
        SideSell = '2'
    };
}

我可以在其他 C# 项目中引用这些类型,并且在 IronPython 中,我可以反映程序集并毫无问题地查看它们。我也已经在 Powershell 中使用它们很多个月了,没有任何问题 - 直到现在。我这样引用它们:

[Fix.Side]::SideBuy

我刚刚从 Visual Studio 2008 迁移到 Visual Studio 2010,现在我这样定义的一些枚举对 Powershell 是不可见的。我看不出声明有什么不同,我可以毫无问题地反映类型。

这是一个 .NET 4.0 程序集,我已将 Powershell 配置为与 4.0 运行时一起运行。我通过以下注册表更改做到了这一点。

reg add hklm\software\microsoft\.netframework /v OnlyUseLatestCLR /t REG_DWORD /d 1
reg add hklm\software\wow6432node\microsoft\.netframework /v OnlyUseLatestCLR /t REG_DWORD /d 1

有人遇到过这样的问题吗?

【问题讨论】:

  • 您是如何配置 powershell 以使用 4.0 的?你用 $psversiontable 验证了吗?

标签: .net visual-studio-2010 powershell c++-cli


【解决方案1】:

它对我有用。我的步骤:

我使用单个源文件(stdafx.* 除外)构建了一个 C++/CLI .NET 4.0 程序集:

#include "stdafx.h"

namespace Fix 
{ 
    public enum class Side 
    { 
        SideBuy = '1', 
        SideSell = '2' 
    }; 
} 

然后我创建并调用这个测试脚本:

Add-Type -Path "C:\...\TryEnum40.dll"
[Fix.Side]::SideBuy

有效:枚举值按预期打印。

如何配置我的 PowerShell 以使用 .NET 4.0?我不使用任何注册表技巧。我在 PS 主目录(或在实现 PowerShell 主机的应用程序的主目录(例如 MyApp.exe.config)中创建 XML 文件“powershell.exe.config”,我也尝试过这样的场景)。

<?xml version="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0.30319"/>
        <supportedRuntime version="v2.0.50727"/>
    </startup>
</configuration>

x64机器:文件也需要复制到C:\Windows\SysWOW64\WindowsPowerShell\v1.0

附:如果这仍然没有帮助,您能否提供您收到的确切错误消息?

【讨论】:

  • 不高兴,感谢您的配置文件选项,但注册表黑客很痛苦,因为它影响了其他软件。
  • 您演示的简单案例也适用于我,在实际情况下,我在头文件中定义了许多枚举。 Powershell 只是说它找不到类型,我也可以通过重新排序声明使其在不同类型上失败。这很奇怪。我也有一个用户报告了与类类型相同的问题。
猜你喜欢
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
相关资源
最近更新 更多