2010-07-27 58 views
2

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

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 

有没有人有这样的问题?

+0

你是如何配置PowerShell使用4.0的?您是否使用$ psversiontable进行验证? – x0n 2010-07-28 22:50:59

回答

4

它适用于我。我的步骤:

我生成C++/CLI .NET 4.0组件与单个源文件(除了stdafx *):

#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

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

+0

没有快乐,感谢配置文件选项,但注册表黑客是一个痛苦,因为它影响到其他软件。 – Gary 2010-07-29 23:58:25

+0

您演示的简单案例也适用于我,在真实情况下,我在头文件中定义了许多枚举。 Powershell只是说它找不到类型,我也可以通过重新排序声明来让它在不同类型上失败。这很奇怪。我也有一个用户报告与类类型相同的问题。 – Gary 2010-07-30 00:07:18