Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么SGEN.EXE要求对引用的程序集具有写访问权限?_C#_Visual Studio 2008 - Fatal编程技术网

C# 为什么SGEN.EXE要求对引用的程序集具有写访问权限?

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

我有一个项目链接到ICSharpCode.SharpZipLib.dll(dll本身并不重要)。项目输出之一是序列化程序集。此输出由microsoft工具sgen.exe生成。在我将SharpZipLib签入到我的源代码存储库之前,所有这些都可以正常工作,这使得它成为只读的。我不是自己构建SharpZipLib程序集,所以签入这个二进制文件对我来说是有意义的。然而,当我构建时,sgen会失败,并出现“拒绝访问”错误

下面是一个用于复制的简化命令:

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视图的信息

希望这能帮助其他人解决同样的问题,并认为唯一的解决办法是签出文件

-阿基米德