C#.NET 3.5从网络共享加载程序集

时间:2011-08-17 06:58:50

标签: c# networking .net-3.5

我必须从网络共享加载程序集,但我得到一个例外:

17.08.2011 9:50:50: Exception: TargetInvocationException - "Exception has been thrown by the target of an invocation."
        System.Object _InvokeMethodFast(System.Object, System.Object[], System.SignatureStruct ByRef, System.Reflection.MethodAttributes, System.RuntimeTypeHandle)
           at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
       at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
       at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
       at MachineInterface.Common.DLLLoader.ExecuteChipConverter(String dllPath, Hashtable cardData, String customerCode) in ..\Common\DLLLoader.cs:line 54
17.08.2011 9:50:50: Exception: SecurityException - "Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed."
        Void Check(System.Object, System.Threading.StackCrawlMark ByRef, Boolean)
           at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
       at System.Security.CodeAccessPermission.Demand()
       at System.Reflection.Assembly.get_Location()
       at CombosHelper.CombosDataFile.GetTemplateByAlias(String Alias)
       at TSPHelper.ChipDataConverter.ConversionProvider.DChipToChipXpressStartMessage(String DChipHexString, String customerCode, String CustomerCardTypeCode, String ArticleCode)
       at ToChipXpressStartMessage(Hashtable cardData, String customerCode)

任何人都有类似的问题,可以帮我解决这个问题吗? 奇怪的是,相同的应用程序可以在其他计算机上运行,​​并从网络共享加载程序集就好了。

1 个答案:

答案 0 :(得分:3)

当程序集从网络共享加载时,它将在Intranet应用程序的上下文中运行。

默认情况下,Intranet应用程序没有文件IO permiessions。

您有多种选择,从授予IO权限到所有Intranet服务(错误),或者仅使用所需的最低权限信任您要加载的特定程序集/文件夹。

有关可用工具的详细概述,请访问MSDN http://msdn.microsoft.com/en-us/library/zdc263t0(v=vs.80).aspx

您应用策略的范围可以是计算机或企业级别,企业级别适用于整个域,这听起来最适合您的应用程序。

如果此错误仅发生在少数PC上,那么它们的组策略,不同的计算机策略或访问程序集的用户的权限可能会有所不同。