简体   繁体   English

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

[英].net local assembly load failed with CAS policy

We are getting the following assembly load error. 我们收到以下程序集加载错误。 The assembly is loaded from the local path "C:\\Program Files\\ASWorx Products\\ASWorx\\Bin\\". 程序集从本地路径“ C:\\ Program Files \\ ASWorx Products \\ ASWorx \\ Bin \\”加载。 The problem is not there with the old version of the binary. 旧版本的二进制文件不存在问题。 The issue appears when we have sent the new binary through e-mail. 当我们通过电子邮件发送了新的二进制文件时,就会出现此问题。 Build settings are not changed. 构建设置不会更改。 How can we correct the issue? 我们如何解决这个问题? The issue appears in Win7 32 bit machine 该问题出现在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()

From the link in the error message : 错误消息中链接

If an application has been copied from the web, it is flagged by Windows as being a web application, even if it resides on the local computer. 如果已经从Web复制了应用程序,则Windows将其标记为Web应用程序,即使它位于本地计算机上也是如此。 You can change that designation by changing the file properties, or you can use the element to grant the assembly full trust. 您可以通过更改文件属性来更改该名称,也可以使用元素来授予程序集完全信任。 As an alternative, you can use the UnsafeLoadFrom method to load a local assembly that the operating system has flagged as having been loaded from the web. 或者,可以使用UnsafeLoadFrom方法加载操作系统已标记为已从Web加载的本地程序集。

Try opening the file properties and clicking 'Unblock': 尝试打开文件属性,然后单击“取消阻止”:

属性窗口

I am able to resolve this problem using below link and adding the settings to my config. 我可以使用下面的链接并将设置添加到我的配置中来解决此问题。

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

<configuration>
   <runtime>
      <loadFromRemoteSources enabled="true"/>
   </runtime>
</configuration>

I had to use the method 我不得不使用该方法

Assembly.UnsafeLoadFrom()

instead of Assembly.LoadFrom, It fixed my issues... Found it at this link: 而不是Assembly.LoadFrom,它解决了我的问题...在以下链接中找到了它:

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

Additionally to the above given answer here my solution for the problem. 除了以上给出的答案,这里是我针对该问题的解决方案。

Trying to do the unblocking resulted always that the file still appeared to be blocked. 尝试执行解除阻止操作始终会导致文件似乎仍然被阻止。

So, I made a new folder, copied over the affected files and performed the unblocking file by file. 因此,我创建了一个新文件夹,将其复制到受影响的文件上,然后逐个文件执行解锁文件。 Surprisingly the flag got removed compared to doing the same action in the original file location. 令人惊讶的是,与在原始文件位置中执行相同的操作相比,该标志被删除了。 So, the final step was copying the now unblocked files back to the original location. 因此,最后一步是将现在已解除阻止的文件复制回原始位置。 Done! 做完了!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM