C# 为什么SGEN.EXE要求对引用的程序集具有写访问权限?
我有一个项目链接到ICSharpCode.SharpZipLib.dll(dll本身并不重要)。项目输出之一是序列化程序集。此输出由microsoft工具sgen.exe生成。在我将SharpZipLib签入到我的源代码存储库之前,所有这些都可以正常工作,这使得它成为只读的。我不是自己构建SharpZipLib程序集,所以签入这个二进制文件对我来说是有意义的。然而,当我构建时,sgen会失败,并出现“拒绝访问”错误 下面是一个用于复制的简化命令:C# 为什么SGEN.EXE要求对引用的程序集具有写访问权限?,c#,visual-studio-2008,C#,Visual Studio 2008,我有一个项目链接到ICSharpCode.SharpZipLib.dll(dll本身并不重要)。项目输出之一是序列化程序集。此输出由microsoft工具sgen.exe生成。在我将SharpZipLib签入到我的源代码存储库之前,所有这些都可以正常工作,这使得它成为只读的。我不是自己构建SharpZipLib程序集,所以签入这个二进制文件对我来说是有意义的。然而,当我构建时,sgen会失败,并出现“拒绝访问”错误 下面是一个用于复制的简化命令: sgen.exe /assembly:.\MyP
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不会修改任何引用的程序集,所以为什么要打开它们进行读/写操作
我可以禁用序列化程序集的生成,但这是一个理想的优化
注意:我正在使用带有动态视图的RationalClearCase。我不认为这是相关的,但为了完整性,我将其包括在内。这听起来像是对sgen.exe不必要的限制
我建议将此报告为一个bug。我今天在ClearCase动态视图中构建VS2005解决方案时遇到了同样的问题。幸运的是,ProcMon在动态视图中工作(通常是蓝屏),我能够找到SGEN.EXE在打开引用的程序集时所请求的内容。它需要执行访问!这在ClearCase中是可配置的,因此我为所有用户和bingo将有关程序集的执行权限设置为true 这是ProcMon的一句话,让我明白了这一点 所需访问:执行/遍历、同步、处置:打开、选项:同步IO非警报、非目录文件、属性:n/a、共享模式:读取、删除、分配大小:n/a 在更改程序集的执行权限之前,ProcMon显示SGEN.EXE正在从视图接收“拒绝访问”。如果你想做更多的研究,网上有更多关于执行权限和ClearCase视图的信息 希望这能帮助其他人解决同样的问题,并认为唯一的解决办法是签出文件 -阿基米德