Translate

2012年8月17日 星期五

【Windows】C# 使用Powershell控制SCVMM2012之錯誤訊息

環境:
在Windows Server 2008 R2 上安裝Visual Studio 2010,並使用C#寫Windows Form介面,利用Powershell控制System Center Virtual Machine Manager 2012 RC


錯誤訊息 1:
無法載入檔案或組件 'TraceWrapper, Version=1.0.523.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其相依性的其中之一。 系統找不到指定的檔案。

Could not load file or assembly ‘TraceWrapper, Version=1.0.523.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35′ or one of its dependencies. An attempt was made to load a program with an incorrect format.



發生原因:
一般錯誤出現於64位元的系統上加載32位元文件,或者32位元系統加載64位元文件;問題來了,作業系統是64位元,加載的TraceWrapper.dll也是64位元的,為什麼還會出現錯誤?原因在於VS2010是32位元程式,從而由它起來的所有程序都是32位元的,不信您可以叫出工作管理員看看:devenv.exe *32。這種情況下,所有的程序都運行於32位元模式,在這種模式下去讀取64位元的TraceWrapper.dll自然就出現錯誤了。

解決方式:
在專案中加入參考:32位元的TraceWrapper.dll
參考路徑:*\SCVMM2012.EVAL.RC\i386\Setup\TraceWrapper.dll


錯誤訊息 2:
混合模式組件是針對版本 'v2.0.50727' 的執行階段建置的,無法在沒有其他組態資訊的情況下載入 4.0 執行階段中。

參考資料1:http://msdn.microsoft.com/zh-tw/library/bbx34a2h(v=vs.100).aspx
參考資料2:http://msdn.microsoft.com/zh-tw/library/ff770241(v=vs.100).aspx

解決方式:
在專案中的應用程式組態檔 app.config加入下列紅色程式:

<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
        <add name=*"
            connectionString="Data Source=*.*.*.*;Initial Catalog=*;User ID=*;Password=*"
            providerName="System.Data.SqlClient" />
    </connectionStrings>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

程式說明:
使用 .NET Framework 4 為啟動原則,並相容於舊版 .NET Framework 來建立混合模式組件。
現在如果當程序在.NET4.0環境下要使用.NET2.0及.NET3.5的程序時就必須將useLegacyV2RuntimeActivati​​onPolicy設置為true,同時還要注意,需要在startup配置節的字節中添加supportedRuntime配置節,並指定為“v4.0”,表示使用.NET4.0運行時來運行程序。

備註:
若<configuration></configuration>中有其他設定,記得要將此段程式加至下方才有作用。

沒有留言:

張貼留言