2010-07-27 60 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