2009-04-20 87 views
1

我有一個與ICSharpCode.SharpZipLib.dll鏈接的項目(該DLL本身並不重要)。項目輸出之一是序列化程序集。這個輸出是由微軟工具sgen.exe生成的。所有這些按預期工作,直到我檢查SharpZipLib到我的源代碼庫,這使得它只讀。我自己並沒有構建SharpZipLib程序集,因此我有權檢查此二進制文件,但在構建時,sgen會因「訪問被拒絕」錯誤而失敗。爲什麼SGEN.EXE需要對引用程序集的寫入權限?

這裏是一個簡化的命令重現:

sgen.exe /assembly:.\MyProject.dll /proxytypes /reference:.\ICSharpCode.SharpZipLib.dll 

這裏是所產生的誤差:

SGEN : error : Could not load file or assembly 'ICSharpCode.SharpZipLib, Version=0.85.1.271, Culture=neutral, PublicKeyToken=1b03e6acf1164f73' or one of its dependencies. Access is denied. 
Done building project "MyProject.csproj" -- FAILED. 

再次,當只讀標誌沒有被設置在ICSharpCode不會發生該錯誤.SharpZipLib.dll。在構建過程中,我有哲學上的異議來檢查文件,但似乎沒有辦法繞過它。如果任何引用的程序集是隻讀的,sgen.exe會失敗。

需要注意的是,sgen.exe不會修改任何引用的程序集,爲什麼它打開它們以便讀/寫?

我可以禁用序列化程序集的生成,但它是一個理想的優化。

注意:我使用動態視圖的理性clearcase。我不認爲這是相關的,但我包括它的完整性。

回答

2

今天我在ClearCase動態視圖中創建了一個VS2005解決方案。幸運的是,ProcMon在動態視圖中工作(通常是藍屏),並且我能夠在打開引用程序集時找出SGEN.EXE請求的內容。它需要執行訪問!這在ClearCase中是可配置的,因此我將相關程序集的執行權限設置爲對所有用戶和賓果爲true!

下面是ProcMon的實際產品線,它介紹了我的這一點。

所需的訪問:執行 /遍歷,同步處理方式:開放,選項:同步IO非警覺,非目錄文件,屬性:N/A,ShareMode:讀取,刪除,AllocationSize:N/A

在更改程序集的執行權限之前,ProcMon顯示SGEN.EXE從視圖中接收到「ACCESS DENIED」。如果您想進行更多的研究,有關於網絡上可用的執行權限和ClearCase視圖的更多信息。

希望這可以幫助別人解決同一問題,並認爲唯一的解決方案是檢查文件。

-Archimedes

+0

`cleartool protect`可用於更改權限。 – heavyd 2010-08-26 12:38:00

1

這聽起來像是一個不必要的限制sgen.exe。

我建議您將此舉報告爲Microsoft Connect上的一個錯誤。

相關問題