我在使用 VS2010 时遇到一个奇怪的问题。我们使用 TFS 构建 API dll,并使用完全可信的映射网络驱动器在项目中引用它们。我们已经这样工作了至少两年,一切都很顺利。
今天,我将一个web应用程序转换为vs2010,当我在Release中编译它时,它给了我:
SGEN:错误:无法加载文件或 程序集'文件:///L:\Api\Release API_20100521.1\Release\CS.API.Exceptions.dll' 或其依赖项之一。手术 不支持。 (例外情况来自 H结果:0x80131515)
奇怪的是,当它在调试配置文件下时它正在工作......
我尝试添加
<runtime>
<loadFromRemoteSources enabled="true" />
</runtime>
进入app.config,仍然没有运气(请参阅http://social.msdn.microsoft.com/Forums/en/msbuild/thread/d12f6301-85bf-4b9e-8e34-a06398a60df0和http://msdn。 microsoft.com/en-us/library/dd409252(VS.100).aspx)
我非常确定这个问题来自 Visual Studio 或 msbuild,因为我们的代码在产品中不会从网络共享运行,因为所有引用的 dll 都被复制到 bin 文件夹中。
如果有人有解决方案(或只是搜索路径的想法),请告诉我!
编辑:事实证明它正在调试模式下工作,因为序列化程序集的生成已关闭。正如标题所说,这确实是一个 SGEN 问题,因为正是这个实用程序表明该路径不受信任......
我可以通过在 Windows 资源管理器中找到程序集 DLL,右键单击,选择“属性”,然后按“取消阻止”按钮来修复此错误。该 DLL 有一个流将其标记为外部文件 - 通过单击取消阻止可以删除该指定。
我刚刚在 TFS 构建服务器上遇到了相同/类似的问题,其中构建从网络共享引用 dll。
问题是 CLR v4 安全策略模型自以前的版本以来已经发生了变化,并且不再像以前那样对程序集进行沙箱处理。
要解决您的问题,只需找到 sgen.exe 的位置并在同一文件夹中创建包含以下内容的 sgen.exe.config:
<configuration>
<runtime>
<loadFromRemoteSources enabled="true" />
</runtime>
</configuration>
sgen.exe 通常位于
"C:\Program Files\Microsoft SDKs\Windows\v[current version]\bin\NETFX 4.0 Tools"
您可以在这篇博文中了解有关 .NET 4.0 中 CAS 策略的一些更改:链接
遇到同样的问题,并且配置更改不起作用。只有当我在项目属性中将“生成序列化程序集”设置为“关闭”时,它才起作用。
我遇到了同样的错误,发现我的 DLL 被“阻止”。在资源管理器中打开 DLL,右键单击 -> 属性 -> 按“取消阻止”。
http://cantgrokwontgrok.blogspot.com/2009/10/visual-studio-unknown-build-error.html
我遇到了完全相同的问题,并通过在 C:\Program Files (x86)\Microsoft SDKs\Windows 7.0A\Bin\NETFX 4.0 Tools 下添加 sgen.exe.config 来修复它
正如其他人所说,使用这个简单的配置
<?xml version ="1.0"?>
<configuration>
<runtime>
<loadFromRemoteSources enabled="true" />
</runtime>
</configuration>
对于那些运行 64 位版本的 TFS 构建服务的人,我必须在以下路径中创建配置文件:
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64
文件内容:
<?xml version ="1.0"?>
<configuration>
<runtime>
<loadFromRemoteSources enabled="true" />
</runtime>
</configuration>
我遇到了同样的问题,将程序集加载到 GAC 中并工作
将下面的代码片段添加到 app.config 文件中对我来说是有效的。我正在运行 Windows XP,带有 VS2010 service pack 1。
<configuration>
<runtime>
<loadFromRemoteSources enabled="true" />
</runtime>
</configuration>
以防万一像我一样,Unblock 不是一个解决方案,因为 Unblock 没有出现在我的 dll 文件属性上。继续寻找并最终关闭我的解决方案文件并使用本地 C: 副本而不是项目 sln 文件的网络 UNC 路径重新打开。走了这条路之后就可以发布了。
在我的例子中,一堆 dll 被阻止了。
要取消阻止文件夹中的所有文件,我使用了 power shell 并使用以下命令
dir -Path [directory path] -Recurse | Unblock-File
仅供参考,如果您运行的是 Windows 7,则可以在以下位置找到 sgen.exe 文件:
C:\Program Files (x86)\Microsoft SDKs\Windows 7.0A\Bin\NETFX 4.0 Tools
我必须创建一个 sgen.exe.config 并将其放置在那里,然后这个问题就消失了。
我遇到了类似的问题,最后通过删除解决方案的 Properties 文件夹中的许可证.licx 文件解决了这个问题。
unblock
和config
都不适合我。
对我来说,诀窍是这个关于caspol
的技巧。
我跑了
%windir%\Microsoft.NET\Framework\v2.0.50727\CasPol.exe -m -ag 1.2 -url file://UncPathName/UncSubPath/* FullTrust
我已经准备好了,甚至不需要重新启动 VisualStudio。