.net本地程序集加载失败,CAS策略

Maa*_*anu 43 .net c#

我们收到以下程序集加载错误.程序集从本地路径"C:\ Program Files\ASWorx Products\ASWorx\Bin \"加载.旧版本的二进制文件不存在问题.当我们通过电子邮件发送新二进制文件时,会出现此问题.构建设置不会更改.我们如何纠正这个问题?问题出现在Win7 32位机器上

File name: 'file:///C:\Program Files\ASWorx Products\ASWorx\Bin\ASConnexDI.dll' ---> System.NotSupportedException: An attempt was made to load an assembly from a network location which would have caused the assembly to be sandboxed in previous versions of the .NET Framework. This release of the .NET Framework does not enable CAS policy by default, so this load may be dangerous. If this load is not intended to sandbox the assembly, please enable the loadFromRemoteSources switch. See http://go.microsoft.com/fwlink/?LinkId=155569 for more information.

   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)

   at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)

   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)

   at System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)

   at System.Reflection.Assembly.LoadFrom(String assemblyFile, Evidence securityEvidence)

   at System.Activator.CreateInstanceFromInternal(String assemblyFile, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityInfo)

   at NeST.ICE.IOSystem.DIManager.InitializeDI()
Run Code Online (Sandbox Code Playgroud)

Blo*_*ard 90

错误消息中链接:

如果已从Web复制应用程序,则Windows将其标记为Web应用程序,即使它位于本地计算机上也是如此.您可以通过更改文件属性来更改该指定,也可以使用该元素授予程序集完全信任.作为替代方法,您可以使用UnsafeLoadFrom方法加载操作系统已标记为已从Web加载的本地程序集.

尝试打开文件属性并单击"取消阻止":

属性窗口

  • 对我来说,这只是一个从我们自己的内部Proget实例"下载"的nuget包,这必然导致了这个问题:) Unblock工作 (2认同)
  • 对于许多文件,我使用powershell脚本:dir -Path YOUR_PATH -Recurse | 阻止 - 文件 (2认同)

小智 11

我可以使用下面的链接解决此问题,并将设置添加到我的配置.

https://msdn.microsoft.com/en-us/library/dd409252(VS.100).aspx

<configuration>
   <runtime>
      <loadFromRemoteSources enabled="true"/>
   </runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用,他们更赞成的答案没有。 (2认同)
  • 这是一个愚蠢的,通过把它放在配置中,它只是绕过微软试图实现的"安全"...大声笑 (2认同)

Pel*_*let 5

我不得不使用该方法

Assembly.UnsafeLoadFrom()
Run Code Online (Sandbox Code Playgroud)

而不是 Assembly.LoadFrom,它解决了我的问题...在此链接中找到它:

https://msdn.microsoft.com/en-us/library/dd409252(VS.100).aspx