我有一個與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。我不認爲這是相關的,但我包括它的完整性。
`cleartool protect`可用於更改權限。 – heavyd 2010-08-26 12:38:00