2014-02-25 127 views
1

我爲Exchange 2010管理編寫了一個cmdlet。所以我需要在Exchange 2010服務器上進行調試。 我有一個Exchange 2010在虛擬機上啓動(我有一個VS2012)。VS 2012 cmdlet遠程調試不會在斷點處停止

我的調試計劃是這樣的。作爲生成後的操作我設置如下:

cmd.exe /c copy $(TargetPath) \\test-exch2010-1\c$\temp /y 

由於運行命令我設置如下:

Start external command: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe 
Command line arguments: -NoExit -Command "Import-Module C:\Temp\ExchMgmt.dll" 

當我運行該項目的PowerShell和目標服務器上適當的命令運行。但是,當我運行cmdlet時,根本沒有任何斷點。

如果我以相同的方式構建項目,但手動在目標服務器上運行Powershell,請導入模塊,然後將VS2012附加到powershell.exe過程中,所有斷點都會成功命中。雖然有時會發生同樣的問題

Exch2010服務器在域中,VS2012計算機不在。我使用域中唯一的帳戶進行連接,這是一切管理員:-)此外,我已明確授權此用戶在SecPol中調試程序。

此外我試圖調試這個項目是VS2010。在那裏我收到一條消息:「以下模塊是通過啓用優化或者沒有調試信息來構建的」。 我雙重檢查項目設置:
- 優化代碼被禁用
- 調試信息是完全
- PDB文件中生成

我通過類似主題挖,並發現禁用僅我的代碼設置幫助。我試過這個,但它在我的情況下沒有幫助

我注意到System.Data.dll具有不同的平臺目標(我使用x64,這可能是一個原因)的警告。由於我沒有使用這個程序集,我從引用列表中刪除了它。之後,我注意到當我運行該項目時沒有變化。但是,當我連接調試到運行的powershell.exe過程與加載我的模塊遠程計算機上我看到調試日誌說明如下:

'powershell.exe' (CLR v2.0.50727: DefaultDomain): Loaded 'C:\temp\ExchMgmt.dll'. Cannot find or open the PDB file. 

但是我保證我DLL和PDB文件複製到遠程計算機。 我檢查加載模塊(調試 - > Windows - >模塊),發現我的模塊加載了沒有調試符號。當我打開符號加載信息窗口時,我發現以下條目:

d:\Projects\ExchMgmt\ExchMgmt\obj\x64\Debug\ExchMgmt.pdb: PDB does not match image. 

我檢查過powershell.exe進程是x64。但我也注意到它說CLR是2.0.50727。不知道這是正確的,因爲我的模塊的目標框架是3.5

回答

0

我提出了一個解決方案here

  • 在C創建powershell.exe.config文件下一powershell.exe:\ Windows \ System32下\ WindowsPowerShell \ V1。0 \目錄
  • 假設一個已經不存在,設置的內容是 <?xml version ="1.0"?> <configuration> <startup> <supportedRuntime version="v2.0.50727" /> <!-- where 2.0.50727 is the version I read above, tweak if necessary --> </startup> </configuration>

我設置第一個版本3.5,這是我預期相符建組裝。但是後來我在VS2012中發現一個錯誤,即powershell.exe平臺比一個VS2012運行的更新。所以我將它設置爲2.0.50727,現在它工作正常:-)

相關問題